обертка для DCL
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > обертка для DCL

обертка для DCL

Ответ
Поиск в этой теме
Непрочитано 04.04.2013, 14:52 #1
обертка для DCL
Мансур
 
Инженер САПР
 
Тюмень
Регистрация: 12.11.2004
Сообщений: 36

Идея-фикс к пятнице (прошу помидорами не закидывать):
вместо написания связки из DCL и нагромождения кода в VLisp делать такую конструкцию:

Код:
[Выделить все]
 
(defun MyDlg ( / DlgDefs DlgInit Lst)
  (setq
    Lst (list "Item1" "Item2" "Item3") ;; список для popup_list 
    DlgDefs ;; шаблон для генерации DCL
      '(
        ;; новый тайл
        (myeditbox :edit_box (width . 30) (editwidth . 10)) 
        ;; -> myeditbox :edit_box { width=30; editwidth=10; }
        ;; определение диалога
        (mydialog ;; идентификатор диалога
          :dialog "DialogCaption"
        ;;-> :myeditbox {label="Enter string"; key=key1; width=10;}
            (:myeditbox "Enter string" (key . key1) (width . 10))
            (:popup_list "Select item" (key . keylst) (width . 10))
            (:button "Select object" (key . btSel) (fixed_width . true))
            spacer
            (:radio_column "Radio group"
              (:radio_button "Case 1" (key . bkey2))
              (:radio_button "Case 2" (key . bkey3))
            )
            errtile
            ok_cancel
        )
     )

    DlgInit ;; список для инициализации диалога
             ;; (key [(onchange> (выражение)] [(init> (выражение))]
             ;; для нужных нам элементов диалога определяем необходимый набор выражений
             ;; которые будут выполняться в соответствующих местах,
             ;; например onchange> - при потере фокуса, init> - при запуске диалога и т.п.
      '((key1 (onchange> (print $value)) (init> (if obj (cdr (assoc 0 (entget (car obj)))) "--")))
        (keylst (initpopup> "1" Lst) (onchange> (print "list item")) (get> Val))
        (bkey2 (act> (print "bkey2 pressed")))
        (bkey3 (init> . "1") (onchange> (print "bkey3 pressed") (set_tile "key1" "Hey2!")))
        (btSel (act> (done_dialog 2)) (onclose> 2 (setq obj (entsel "\nSelect object: "))))
        ;(T (if obj (set_tile "key1" (vl-princ-to-string obj))))
      )
  )
  ;; DoDialog - функция которая всю эту хрень парсит, сохраняет в DCL и вызывает
  (DoDialog DlgDefs DlgInit "mydialog")
  (princ)
)    
Да, я в курсе, что идея хранить DCL внутри лиспа не нова. Но именно в таком ракурсе не встречал.
Профит - обходимся без DCL и гораздо проще реализуем всю dcl-ную логику.
Я думаю, реализация DoDialog тоже в скором будущем нарисуется.
Хотелось бы услышать предложения/критику.
Просмотров: 2605
 
Непрочитано 04.04.2013, 17:20
#2
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Мансур, поздравляю, ты "открыл" невизуальное программирование. Именно так, в древние времена, писали программы на всех языках программирования - в коде, вслепую, описывали элементы диалоговых окон. Это вообще-то и сейчас можно сделать, создавая формы в run-time, только занимаются этим в исключительных случаях, при разработке компонентов, а также по религиозным причинам.

Цитата:
Профит - обходимся без DCL и гораздо проще реализуем всю dcl-ную логику.
Как раз "вековая мечта" программистов была прямо противоположная - отделить внешнее представление от логики работы. Что с успехом сделано во всех современных средах программирования.

Нет никакой "dcl-ной логики" - логика есть в программе. И не надо её, "dcl-логику", придумывать. Надо иметь "контролы" и ссылки на имена событий (а в Lisp это как раз легко делать), которые происходят при действии с элементами окна. Описание формы само по себе и его можно менять сколько угодно, логика работы программы - тоже своя. Её можно менять не затрагивая форму. А в Lisp с dcl можно вообще одной формой в разных программах пользоваться.
ShaggyDoc вне форума  
 
Непрочитано 04.04.2013, 18:01
#3
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Мансур Посмотреть сообщение
Идея-фикс к пятнице (прошу помидорами не закидывать):
Чем бы дитя не тешилось, лишь бы не забеременело
gomer вне форума  
 
Непрочитано 04.04.2013, 20:00
#4
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Мансур Посмотреть сообщение
Хотелось бы услышать предложения/критику.
Как выше верно отметил ShaggyDoc, смешивать логику работы приложения с его визуальным представлением - это очень плохое решение. Не стоит открытую тобой "Америку" брать на вооружение, т.к. сам же потом и намучаешься с ней...
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 12.04.2013, 09:01
#5
E-degtyarev

Помогаю, кому делать нечего.
 
Регистрация: 27.03.2009
Русская деревня
Сообщений: 394


Цитата:
Сообщение от Мансур Посмотреть сообщение
Хотелось бы услышать предложения/критику.
Это "технология" конца 80-х начала 90-х годов прошлого столетия. Имел дело с "Турбо Паскаль-6" фирмы Borland. (DOS). Там этот подход был реализован в полной мере.
E-degtyarev вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > обертка для DCL



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не открывается файл sld слайда (в dcl форме) , как открыть с помощью автолиспа dwg файл autocadhelp LISP 11 28.03.2022 21:13
Как создать кнопку в dcl окошке для редактирования программы lsp которую запускаешь для получения этого dcl окошка МИХАИЛCAD Программирование 7 15.03.2013 08:17
Проблема с кодировкой текста диалоговых окон DCL под Windows-8 Pilot Программирование 8 11.01.2013 14:57
DCL урок на примере. Pavel_GP Программирование 22 03.11.2011 13:20