_

[Lisp] CadPack propozycja DCL_StdQuickOptionsDialog

Forum poświęcone flagowemu produktowi oraz aplikacjom pochodnym Autodesku. To jedyne forum mające w tytule nazwę programu, a to ze względu na jego olbrzymią popularność w Polsce. Można tutaj umieszczać również posty z ogólnie pojętej tematyki "Kreślarskie 2D".

[Lisp] CadPack propozycja DCL_StdQuickOptionsDialog

Postprzez ziele_o2k » cze 26, 2017 00:01

Często jest tak, że mam jakiegoś lispa, w którym trzeba mieć kilka ustawień. Denerwowało mnie wybieranie GetKeyWorda i innych getów w linii komend.
Patrząc na CadPackowe cd:DCL_StdEditBoxDialog pomyślałem, żeby napisać podobną funkcję biblioteczną do szybkich ustawień.

Coś zacząłem skrobać. Jeszcze to ani ładu, ani składu nie ma, ale wrzucam może jakieś pomysły będą.
Na tą chwilę ograniczyłem się jedynie do edit boxa i popup listy, ale może rozwinąć zakres?

Wstępny szkic:
Kod: Zaznacz cały
(defun cd:DCL_StdQuickOptionsDialog (Data Default SubTitles Title WidthCol-1 WidthCol-2 BtnsWidth BtnsLabel DPos
                                     / *error* inc keys_A keys_B )

  (if (not DPos) (setq *cd-TempDlgPosition* (list -1 -1)))
  (setq
    inc 0
    keys_A (mapcar '(lambda (%) (strcat "A_" (itoa (setq inc (1+ inc))))) SubTitles)
    inc 0
    keys_B (mapcar '(lambda (%) (strcat "B_" (itoa (setq inc (1+ inc))))) SubTitles)
  )
  (cond
    ( (not
        (and
          (setq fd
            (open
              (setq tmp (vl-FileName-MkTemp nil nil ".dcl")) "w"
            )
          )
          (foreach %
            (list
              (strcat
                "but : button { width = " (if BtnsWidth (itoa BtnsWidth) 13) "; fixed_width = true; }"
                "StdQuickOptionsDialog : dialog {"
                (if Title (strcat "label = \"" Title "\";") "")
                "  : column {"
                "    : row {"
                "      : column {"
              )
              (cd:STR_ReParse
                (mapcar
                  '(lambda (%1 %2)
                    (strcat ": text { key = \"" %2 "\";value = \"" %1 "\";width=" (if WidthCol-1 (itoa WidthCol-1) "20")";}" )
                  )
                  SubTitles
                  keys_A
                )
                " "
              )
              (strcat
                "      }"
                "      : column {"
              )
              (cd:STR_ReParse
                (mapcar
                  '(lambda (%1 %2)
                    (if (= (car %1) 1)
                      (strcat
                        ": popup_list {"
                        "key = \"" %2 "\";"
                        "width = "
                        (if WidthCol-2 (itoa WidthCol-2) "20")
                        ";}"
                      )
                      (strcat
                        ": edit_box {"
                        "key = \"" %2 "\";"
                        (if (caddr %1) (strcat "edit_limit = " (itoa (caddr %1)) ";") "")
                        "width = "
                        (if WidthCol-2 (itoa WidthCol-2) "20")
                        ";}"
                      )
                    )
                  )
                  Data
                  keys_B
                )
                " "
              )
              (strcat
                "      }"
                "    }"
                "  :   spacer_1 {}"
                "  : row { alignment = centered; fixed_width = true;"
                "  : but { key = \"" (car BtnsLabel) "\";"
                "    label = \"" (car BtnsLabel) "\"; is_default = true; }"
                "  : but { key = \"" (cadr BtnsLabel) "\";"
                "    label = \"" (cadr BtnsLabel) "\"; is_cancel = true; }"
                "  } "
                ;(if (setq fl (= (type (cadr Data)) (quote INT))) "" ": errtile { width = 20; }")
                ": errtile { width = 20; }"
                " }"
                "}"
              )
            )
            (write-line % fd)
          )
          (not (close fd))
          (< 0 (setq dc (load_dialog tmp)))
          (new_dialog "StdQuickOptionsDialog" dc ""
            (cond
              ( *cd-TempDlgPosition* )
              ( (quote (-1 -1)) )
            )
          )
        )
      )
    )
    ( T
      ; (setq defval (substr (caddr Data) 1 Limit)
            ; res (if (not (= defval "")) (_CheckVal (car Data) (cadr Data) defval))
      ; )
      ; (mode_tile "edit" 2)
      ; (action_tile "edit" "(setq res (_CheckVal (car Data) (cadr Data) $value))")
      (action_tile (car BtnsLabel) "(setq *cd-TempDlgPosition* (done_dialog 1))")
      (action_tile (cadr BtnsLabel) "(setq res nil) (done_dialog 0)")
      (start_dialog)
    )
  )
)


A testujemy przykładowo z
Kod: Zaznacz cały
(cd:DCL_StdQuickOptionsDialog
  (list
    (list 1 (list "Tak" "Nie") "Tak" 25)
    (list 2
      (list 3
        (list
          (cons 1 "Wprowadz liczbe rzeczywista")
          (cons 2 "Liczba nie moze byc zerem")
          (cons 8 "Spacje niedozwolone")
          (cons 16 "To nie jest liczba")
          (cons 32 "Liczba jest za mala")
          (cons 64 "Liczba jest za duza")
        )
        "2.5" -100 100 2 2
      )
      nil
      25
    )
    (list 1 (list "Kropka" "Przecinek") "Przecinek")
  )
  (list "Tak" "2.5" "Przecinek")
  (list
    "Czy wstawić punkt w środku:"
    "Wysokość tekstu:"
    "Separator:"
  )
  "Quick Settings"
  25
  25
  13
  (list "&Ok" "&Anuluj")
  T
)

Zaznaczam, że nic tu nie działa, ale w trakcie pracy może pojawią się jakieś pomysły ;)
Ziele
Avatar użytkownika
ziele_o2k
 
Posty: 469
Dołączył(a): mar 18, 2014 11:33
Lokalizacja: Poznań

Re: [Lisp] CadPack propozycja DCL_StdQuickOptionsDialog

Postprzez kruuger » cze 26, 2017 11:21

jakis uniwersalny settnigs raczej ciezko zrobic. fajnym wzorem do powielania moze byc NOTO z DrawingNotes.
noto.png
noto.png (5.62 KiB) Przeglądane 216 razy

bardziej moglby to byc przygotowany szablon. tworzyc w locie iles edit, list chyba ciezko?

mamy DCLEditBox i DCLList
edit1.png
edit1.png (2.64 KiB) Przeglądane 216 razy

stdlist.png
stdlist.png (3.15 KiB) Przeglądane 216 razy

moze by dorobic na wzor z popup list ?
k.
Avatar użytkownika
kruuger
 
Posty: 4765
Dołączył(a): paź 27, 2005 20:14
Lokalizacja: Kraków

Re: [Lisp] CadPack propozycja DCL_StdQuickOptionsDialog

Postprzez MarCho » cze 26, 2017 12:25

jako wybór opcji (i dla osób niechętnie czytających linię komend) zrobiłem takie proste dynamiczne okno dialogowe - trochę niezdarne, ale u mnie działa:
Załączniki
CAD-option.png
CAD-option.png (4.09 KiB) Przeglądane 202 razy
dialog1.lsp
(1.77 KiB) Pobrane 7 razy
MarCho
 
Posty: 31
Dołączył(a): paź 12, 2010 08:15

Re: [Lisp] CadPack propozycja DCL_StdQuickOptionsDialog

Postprzez ziele_o2k » cze 26, 2017 12:46

kruuger napisał(a):(...)moze by dorobic na wzor z popup list ?
k.

Coś w tę stronę?
Kod: Zaznacz cały
(defun c:tese ( / )
  (cd:DCL_StdPopupDialog
    '("A" "B" "C")
    0
    "TEST"
    "Testowa"
    20
    2
    15
    '("&Ok" "&Cancel")
    T
  )
)


(defun cd:DCL_StdPopupDialog (Data Pos Title ListTitle Width Btns BtnsWidth BtnsLabel DPos
                              / fd tmp ok ca dc res)
  (if (not DPos) (setq *cd-TempDlgPosition* (list -1 -1)))
  (cond
    ( (not
        (and
          (setq fd
            (open
              (setq tmp (vl-FileName-MkTemp nil nil ".dcl")) "w"
            )
          )
          (setq ok (strcat
                     ": but { label = \"" (car BtnsLabel) "\";"
                     "  key = \"" (car BtnsLabel) "\"; is_default = true;}"
                   )
                ca (strcat
                     ": but { label=\"" (cadr BtnsLabel) "\";"
                     "  key = \"" (cadr BtnsLabel) "\";is_cancel = true;}"
                   )
          )
          (foreach %
            (list
              (strcat
                "but : button { width = " (if BtnsWidth (itoa BtnsWidth) 13)
                "; fixed_width = true; }"
                "StdPopupDialog: dialog { "
                (if Title (strcat "label = \"" Title "\";") "")
                ": popup_list { key = \"popup_list\"; fixed_width=true;"
                (if ListTitle (strcat "label = \"" ListTitle "\";") "")
                "fixed_width = true; fixed_height = true;"
                "width = " (if Width (itoa Width) "20" ) ";"
                "} : row { alignment = centered; fixed_width = true;"
              )
              (cond
                ( (zerop Btns) ca )
                ( (= 1 Btns) ok )
                ( T (strcat ok ca) )
              )
              "}}"
            )
            (write-line % fd)
          )
          (not (close fd))
          (< 0 (setq dc (load_dialog tmp)))
          (new_dialog "StdPopupDialog" dc ""
            (cond
              ( *cd-TempDlgPosition* )
              ( (quote (-1 -1)) )
            )
          )
        )
      )
    )
    ( T     
      (cd:DCL_SetList "popup_list" Data 0)
      (if
        (or
          (not Pos)
          (not (< -1 Pos (length Data)))
        )
        (setq Pos 0)
      )
      (setq res (set_tile "popup_list" (itoa Pos)))
      (action_tile "popup_list"
        (vl-prin1-to-string
          (quote
            (progn
              (setq res (get_tile "popup_list"))
            )
          )
        )
      )
      (action_tile (car BtnsLabel) "(setq *cd-TempDlgPosition* (done_dialog 1))")
      (action_tile (cadr BtnsLabel) "(setq res nil) (done_dialog 0)")
      (start_dialog)
    )
  )
  (if (< 0 dc) (unload_dialog dc))
  (if (setq tmp (findfile tmp)) (vl-file-delete tmp))
  (if (not DPos) (setq *cd-TempDlgPosition* (list -1 -1)))
  res
)
Ziele
Avatar użytkownika
ziele_o2k
 
Posty: 469
Dołączył(a): mar 18, 2014 11:33
Lokalizacja: Poznań

Re: [Lisp] CadPack propozycja DCL_StdQuickOptionsDialog

Postprzez kruuger » cze 26, 2017 13:35

MarCho napisał(a):jako wybór opcji (i dla osób niechętnie czytających linię komend) zrobiłem takie proste dynamiczne okno dialogowe - trochę niezdarne, ale u mnie działa:

jeszcze bardziej dynamiczna wersja. dowolna liczba opcji.
k.
Załączniki
dialogMOD.lsp
(1.28 KiB) Pobrane 7 razy
Avatar użytkownika
kruuger
 
Posty: 4765
Dołączył(a): paź 27, 2005 20:14
Lokalizacja: Kraków

Re: [Lisp] CadPack propozycja DCL_StdQuickOptionsDialog

Postprzez MarCho » cze 26, 2017 14:07

kruuger napisał(a):
MarCho napisał(a):jako wybór opcji (i dla osób niechętnie czytających linię komend) zrobiłem takie proste dynamiczne okno dialogowe - trochę niezdarne, ale u mnie działa:

jeszcze bardziej dynamiczna wersja. dowolna liczba opcji.
k.


dzięki za modyfikację. maleńka poprawka
Załączniki
dialogMOD1.lsp
(1.28 KiB) Pobrane 4 razy
MarCho
 
Posty: 31
Dołączył(a): paź 12, 2010 08:15

Re: [Lisp] CadPack propozycja DCL_StdQuickOptionsDialog

Postprzez kruuger » cze 26, 2017 14:30

MarCho napisał(a):
kruuger napisał(a):
MarCho napisał(a):jako wybór opcji (i dla osób niechętnie czytających linię komend) zrobiłem takie proste dynamiczne okno dialogowe - trochę niezdarne, ale u mnie działa:

jeszcze bardziej dynamiczna wersja. dowolna liczba opcji.
k.


dzięki za modyfikację. maleńka poprawka

dz.

niemniej ziele_o2k chodzilo chyba bardziej o jakies listy, edit box. wydaje mi sie ze jakiegos gotowca nie da sie skrobnac. roznych konfiguracji okna z opcjami jest nieskonczenie wiele. bardziej bym szedl w jakis szablon jak pisalem wczesniej. gdybysmy mieli przygotowane wycinki w dcl i kod lsp do sklejania wtedy latwiej mozna by cos sklecic.
k.
Avatar użytkownika
kruuger
 
Posty: 4765
Dołączył(a): paź 27, 2005 20:14
Lokalizacja: Kraków

Re: [Lisp] CadPack propozycja DCL_StdQuickOptionsDialog

Postprzez ziele_o2k » cze 26, 2017 16:11

kruuger napisał(a):dz.

niemniej ziele_o2k chodzilo chyba bardziej o jakies listy, edit box. wydaje mi sie ze jakiegos gotowca nie da sie skrobnac. roznych konfiguracji okna z opcjami jest nieskonczenie wiele. bardziej bym szedl w jakis szablon jak pisalem wczesniej. gdybysmy mieli przygotowane wycinki w dcl i kod lsp do sklejania wtedy latwiej mozna by cos sklecic.
k.

Mi chodziło o szybkie ustawienia z edit_box i popup_list, nic więcej.
Jeszcze nad tym posiedzę i wrzucę com naskrobał.
Wydaje mi się, że jestem w stanie to opanować. Najwięcej zabawy pewnie będzie będzie z edit boxem.
Ziele
Avatar użytkownika
ziele_o2k
 
Posty: 469
Dołączył(a): mar 18, 2014 11:33
Lokalizacja: Poznań

Re: [Lisp] CadPack propozycja DCL_StdQuickOptionsDialog

Postprzez kruuger » cze 26, 2017 17:02

ziele_o2k napisał(a):
kruuger napisał(a):dz.

niemniej ziele_o2k chodzilo chyba bardziej o jakies listy, edit box. wydaje mi sie ze jakiegos gotowca nie da sie skrobnac. roznych konfiguracji okna z opcjami jest nieskonczenie wiele. bardziej bym szedl w jakis szablon jak pisalem wczesniej. gdybysmy mieli przygotowane wycinki w dcl i kod lsp do sklejania wtedy latwiej mozna by cos sklecic.
k.

Mi chodziło o szybkie ustawienia z edit_box i popup_list, nic więcej.
Jeszcze nad tym posiedzę i wrzucę com naskrobał.
Wydaje mi się, że jestem w stanie to opanować. Najwięcej zabawy pewnie będzie będzie z edit boxem.

co to maja byc te szybkie ustawienia ? szybko mozna pobrac ustawienie z jednego ale nie z kilku na raz. nie napiszesz uniwersalnej funkcji do tego.
Avatar użytkownika
kruuger
 
Posty: 4765
Dołączył(a): paź 27, 2005 20:14
Lokalizacja: Kraków

Re: [Lisp] CadPack propozycja DCL_StdQuickOptionsDialog

Postprzez ziele_o2k » cze 27, 2017 01:16

kruuger napisał(a):
ziele_o2k napisał(a):
kruuger napisał(a):dz.

niemniej ziele_o2k chodzilo chyba bardziej o jakies listy, edit box. wydaje mi sie ze jakiegos gotowca nie da sie skrobnac. roznych konfiguracji okna z opcjami jest nieskonczenie wiele. bardziej bym szedl w jakis szablon jak pisalem wczesniej. gdybysmy mieli przygotowane wycinki w dcl i kod lsp do sklejania wtedy latwiej mozna by cos sklecic.
k.

Mi chodziło o szybkie ustawienia z edit_box i popup_list, nic więcej.
Jeszcze nad tym posiedzę i wrzucę com naskrobał.
Wydaje mi się, że jestem w stanie to opanować. Najwięcej zabawy pewnie będzie będzie z edit boxem.

co to maja byc te szybkie ustawienia ? szybko mozna pobrac ustawienie z jednego ale nie z kilku na raz. nie napiszesz uniwersalnej funkcji do tego.

O coś takiego mi chodziło:
Kod: Zaznacz cały
(defun cd:DCL_StdQuickOptionsDialog (Data Default SubTitles Title WidthCol-1 WidthCol-2 BtnsWidth BtnsLabel DPos
                                     / inc keys_A keys_B fd tmp dc defval res _CheckVal)
                                     
  (defun _CheckVal (Code Bit Val Key DataCV / tmp _Logand _IsBlank _IsSpaces _Pattern _UserList
                                   _Error _StrUnit _Nth _IsNumb res err)
    (if
      (and
        (not Code)
        (not Bit)
        Val
        Key
        (not DataCV)
      )
      (progn
        (setq
          DataCV (cadr(nth (vl-position Key keys_B) Data))
          Code (car DataCV)
          Bit (cadr DataCV)
        )
      )
    )
    (setq tmp Bit)
    (if (not fl) (setq Bit (apply (quote +) (mapcar (quote car) Bit))))
    (defun _Logand (b) (= b (logand Bit b)))
    (defun _IsBlank (s) (= s ""))
    (defun _IsSpaces (s) (not (vl-remove '32 (vl-string->list s))))
    (defun _Pattern (s) (not (wcmatch s (_Nth 3))))
    (defun _UserList (s) (member (strcase Val) (mapcar (quote strcase) (_Nth 4))))
    (defun _Error (b) (if (not fl) (setq err (cdr (assoc b tmp)))))
    (defun _StrUnit (s) (distof s 3))
    (defun _Nth (n / p)
      (if (setq p (vl-catch-all-apply (quote nth) (list n DataCV)))
        p
        (vl-catch-all-error-p p)
      )
    )
    (defun _IsNumb (s b / r)
      (if (setq r (_StrUnit s))
        (cond
          ( (and (= 1 (logand 1 b)) (numberp r)) ) ; liczba / number
          ( (and (= 2 (logand 2 b)) (zerop r)) )   ; zero   / zero
          ( (and (= 4 (logand 4 b)) (minusp r)) )  ; ujemna / negative
          ( T nil )
        )
      )
    )
    (cond
      ( (= Code 0) ; dowolny lancuch / any string
        (cond
          ( (and (_Logand 1) (_IsBlank Val)) (_Error 1) )  ; bez ""            / no ""
          ( (and (_Logand 8) (_IsSpaces Val)) (_Error 8) ) ; bez samych spacji / no spaces
          ( T (setq res Val) )
        )
      )
      ( (= Code 1) ; lancuch zgodny z nazwa tablicy / string consistent with table name
        (cond
          ( (and (_Logand 1) (_IsBlank Val)) (_Error 1) )           ; bez ""                  / no ""
          ( (and (_Logand 2) (not (snvalid Val))) (_Error 2) )      ; bez zlej nazwy snvalid  / no bad name
          ( (and (_Logand 4) (tblsearch (_Nth 2) Val)) (_Error 4) ) ; bez istniejacych nazw   / no existing name
          ( (and (_Logand 8) (_IsSpaces Val)) (_Error 8) )          ; bez samych spacji       / no spaces
          ( (and (_Logand 16) (_Pattern Val)) (_Error 16) )         ; pasujacy do wzorca      / match pattern
          ( (and (_Logand 32) (_UserList Val)) (_Error 32) )        ; nie wystepuje na liscie / does not appear in the list
          ( T (setq res Val) )
        )
      )
      ( (member Code (list 2 3)) ; INT = 2, REAL = 3
        (cond
          ( (and (_Logand 1) (_IsBlank Val)) (_Error 1) )                ; bez ""            / no ""
          ( (and (_Logand 2) (_IsNumb Val 2)) (_Error 2) )               ; bez zera          / no zero
          ( (and (_Logand 4) (_IsNumb Val 4)) (_Error 4) )               ; bez ujemnych      / no negative
          ( (and (_Logand 8) (_IsSpaces Val)) (_Error 8) )               ; bez samych spacji / no spaces
          ( (and (_Logand 16) (not (_IsNumb Val 1))) (_Error 16) )       ; tylko liczby      / only number
          ( (and (_Logand 32) (> (_Nth 2) (_StrUnit Val))) (_Error 32) ) ; liczba za mala    / number to small
          ( (and (_Logand 64) (< (_Nth 3) (_StrUnit Val))) (_Error 64) ) ; liczba za duza    / number to big
          ( T
            (setq res
              (if (_IsNumb Val 1)
                (if (= Code 2)
                  (itoa (fix (_StrUnit Val)))
                  (cd:CON_Real2Str (_StrUnit Val) (_Nth 4) (_Nth 5))
                )
                Val
              )
            )
          )
        )
      )
      ( T nil )
    )
    (if (and defval res)
      (set_tile Key res)
      (set_tile Key Val)
    )
    (if err
      (progn (set_tile "error" err) (mode_tile Key 2))
      (progn (set_tile "error" "") )
    )
    res
  )
  (if (not DPos) (setq *cd-TempDlgPosition* (list -1 -1)))
  (setq
    inc 0
    keys_A (mapcar '(lambda (%) (strcat "A_" (itoa (setq inc (1+ inc))))) SubTitles)
    inc 0
    keys_B (mapcar '(lambda (%) (strcat "B_" (itoa (setq inc (1+ inc))))) SubTitles)
  )
  (cond
    ( (not
        (and
          (setq fd
            (open
              (setq tmp (vl-FileName-MkTemp nil nil ".dcl")) "w"
            )
          )
          (foreach %
            (list
              (strcat
                "but : button { width = " (if BtnsWidth (itoa BtnsWidth) 13) "; fixed_width = true; }"
                "StdQuickOptionsDialog : dialog {"
                (if Title (strcat "label = \"" Title "\";") "")
                "  : column {"
                "    : row {"
                "      : column {"
              )
              (cd:STR_ReParse
                (mapcar
                  '(lambda (%1 %2)
                    (strcat ": text { key = \"" %2 "\";value = \"" %1 "\";width=" (if WidthCol-1 (itoa WidthCol-1) "20")";}" )
                  )
                  SubTitles
                  keys_A
                )
                " "
              )
              (strcat
                "      }"
                "      : column {"
              )
              (cd:STR_ReParse
                (mapcar
                  '(lambda (%1 %2)
                    (if (= (car %1) 1)
                      (strcat
                        ": popup_list {"
                        "key = \"" %2 "\";"
                        "width = "
                        (if WidthCol-2 (itoa WidthCol-2) "20")
                        ";}"
                      )
                      (strcat
                        ": edit_box {"
                        "key = \"" %2 "\";"
                        (if (caddr %1) (strcat "edit_limit = " (itoa (caddr %1)) ";") "")
                        "width = "
                        (if WidthCol-2 (itoa WidthCol-2) "20")
                        ";}"
                      )
                    )
                  )
                  Data
                  keys_B
                )
                " "
              )
              (strcat
                "      }"
                "    }"
                "  :   spacer_1 {}"
                "  : row { alignment = centered; fixed_width = true;"
                "  : but { key = \"" (car BtnsLabel) "\";"
                "    label = \"" (car BtnsLabel) "\"; is_default = true; }"
                "  : but { key = \"" (cadr BtnsLabel) "\";"
                "    label = \"" (cadr BtnsLabel) "\"; is_cancel = true; }"
                "  } "
                ;(if (setq fl (= (type (cadr Data)) (quote INT))) "" ": errtile { width = 20; }")
                ": errtile { width = 20; }"
                " }"
                "}"
              )
            )
            (write-line % fd)
          )
          (not (close fd))
          (< 0 (setq dc (load_dialog tmp)))
          (new_dialog "StdQuickOptionsDialog" dc ""
            (cond
              ( *cd-TempDlgPosition* )
              ( (quote (-1 -1)) )
            )
          )
        )
      )
    )
    ( T
      (mapcar
       '(lambda (%1 %2 %3)
          (if (= (car %1) 1)
            (cd:DCL_SetList %3 (cadr %1) (vl-position %2 (cadr %1)))
            (progn(setq
              defval (substr %2 1 (caddr %1)))
              (princ defval)
              (princ (type defval))
            (setq
              res (if (not (= defval "")) (_CheckVal (caadr %1) (cadadr %1) defval %3 (cadr %1)))
            ))
          )
        )
        Data
        Default
        keys_B
      )
      ; (setq defval (substr (caddr Data) 1 Limit)
            ; res (if (not (= defval "")) (_CheckVal (car Data) (cadr Data) defval))
      ; )
      ; (mode_tile "edit" 2)
      ; (action_tile "edit" "(setq res (_CheckVal (car Data) (cadr Data) $value))")
      (foreach %1 (mapcar 'cons keys_B Data)
        (if (= (cadr %1) 2)
          (action_tile (car %1)
            (vl-prin1-to-string
              (quote
                (progn
                  (_CheckVal (caadr (cdr %1)) (cadadr (cdr %1)) $value $key (cadr (cdr %1)))
                )
              )
            )
          )
        )
      )
      (action_tile (car BtnsLabel)
        (vl-prin1-to-string
          (quote
            (progn
              (setq res
                (mapcar
                 '(lambda (%1 %2)
                    (if (= (car %1) 1)
                      (nth (atoi (get_tile %2)) (cadr %1) )
                      (get_tile %2)
                    )
                  )
                  Data
                  keys_B
                )
              )
              (setq *cd-TempDlgPosition* (done_dialog 1))
            )
          )
        )
      )
      (action_tile (cadr BtnsLabel) "(setq res nil) (done_dialog 0)")
      (start_dialog)
    )
  )
  (if (< 0 dc) (unload_dialog dc))
  (if (setq tmp (findfile tmp)) (vl-file-delete tmp))
  (if (not DPos) (setq *cd-TempDlgPosition* (list -1 -1)))
  res
)

Testować przykładowo z:
Kod: Zaznacz cały
(defun c:tese ( /  )
  (cd:DCL_StdQuickOptionsDialog
    (list
      (list
        1
        (list "Tak" "Nie")
      )
      (list
        2
        (list
          3                                                                                   ;
          (list                                                                                   ;
            (cons 1 "Wprowadz liczbe rzeczywista")                                                ;
            (cons 2 "Liczba nie moze byc zerem")                                                  ;
            (cons 8 "Spacje niedozwolone")                                                        ;
            (cons 16 "To nie jest liczba")                                                        ;
            (cons 32 "Liczba jest za mala")                                                       ;
            (cons 64 "Liczba jest za duza")                                                       ;
          )
          ;19
          -100
          100
          2
          2                                                                       ;
        )
        10
      )
      (list
        2
        (list
          3                                                                                   ;
          (list                                                                                   ;
            (cons 1 "Wprowadz liczbe rzeczywista")                                                ;
            (cons 2 "Liczba nie moze byc zerem")                                                  ;
            (cons 8 "Spacje niedozwolone")                                                        ;
            (cons 16 "To nie jest liczba")                                                        ;
            (cons 32 "Liczba jest za mala")                                                       ;
            (cons 64 "Liczba jest za duza")                                                       ;
          )
          ;19
          -50
          20
          2
          2                                                                       ;
        )
        10
      )
      (list
        1
        (list "Kropka" "Przecinek")
      )
    )
    (list "Tak" "19" "19" "Kropka")
    (list
      "Czy wstawić punkt w środku:"
      "Wysokość tekstu:"
      "Odstęp tekstu:"
      "Separator:"
    )
    "Quick Settings"
    25
    25
    13
    (list "&Ok" "&Anuluj")
    T
  )
)

Jutro albo na dniach postaram się jeszcze sprawdzić kod, bo parę rzeczy można wywalić i opisze po co to i jak używać.
Ziele
Avatar użytkownika
ziele_o2k
 
Posty: 469
Dołączył(a): mar 18, 2014 11:33
Lokalizacja: Poznań

Następna strona

Powrót do AutoCAD

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników