Všechny dialogové boxy v AutoCADu jsou zobrazeny jako modální dialogové boxy. To znamená, že při zobrazení dialogového boxu je umožněno uživateli pouze zadávání parametrů do dialogového boxu, ostatní činnost mimo dialog je zakázaná. V případě potřeby například zadat souřadnice bodu pomocí myši, musíme:
Základní princip skrytí a znovu zobrazení dialogu si ukážeme na fragmentu kódu naší funkce pro zobrazení soustředných kružnic nebo n - úhelníků:
(defun c:SObjekty ()
(setq co_delat 2)
....
(while (>= co_delat 2)
(if (not (new_dialog "jméno" id))
;;; není-li jméno dialogu jméno tak skonči
(exit)
)
....
(action_tile "jméno_prvku1" "(done_dialog 4)")
;;; je-li zaktivován prvek "jméno_prvku"
;;; zavolej funkci done_dialog s hodnotou 4
(action_tile "accept" "(done_dialog 1)")
;;; je-li zmáčknuto tlačítko "OK" zavolej
;;; funkci done_dialog s hodnotou 1
(action_tile "cancel" "(done_dialog 0)")
;;; je-li zmáčknuto tlačítko "CANCEL" zavolej
;;; funkci done_dialog s hodnotou 0
(setq co_delat (start_dialog))
;;; nastaví proměnnou co_delat na hodnotu získanou od funkce
;;; start_dialog (hodnota s kterou končí funkce done_dialog)
(cond ;;; určení další činnosti
((= co_delat 0) ("funkce0 obsluhující přerušení dialogu"))
;;; uživatel stornoval dialog = konec funkce
((= co_delat 1) ("funkce1 obsluhující potvrzení dialogu"))
;;; uživatel potvrdil dialog, zavolej funkci (vykresli)
((= co_delat 4) ("funkce4 obsluhující akci prvku jméno_prvku"))
;;; uživatel zaktivoval prvek "jméno_prvku" reaguj na akci
)
)
(unload_dialog id) ;;; odstraní dialog id z paměti
)
Z uvedené části kódu je patrné, že princip spočívá v použití příkazu done_dialog s parametrem, příkazu start_dialog, proměnné co_delat a smyčky while.
Při startu funkce je nejprve nastavena proměnná co_delat na hodnotu 2 (znamená setrvej ve smyčce). Program vstoupí do smyčky while, done_dialog nastaví všechny prvky dialogu a příkazem start_dialog zobrazí dialog. V tomto stavu setrvá až do aktivace prvku "jméno_prvku1", kdy je zavolán příkaz done_dialog s parametrem určujícím další činnost, který ukončí dialogový box. Příkaz star_dialog je zastaven a do proměnné co_dělat vrátí hodnotu, s kterou byl vyvolán příkaz done_dialog ( v našem případě 4).
Dále je testována podmínka cond . Spustí se přiřazená funkce funkce4. Po jejím skončení se běh programu vrátí na začátek smyčky, je zkontrolována správnost načteného dialogu a dialog je opět zobrazen příkazem start_dialog. Tato činnost se opakuje do té doby než je vyvolána funkce done_dialog s parametrem < 2.
![]()
Standardní přiřazení hodnot parametru u funkce done_dialog:
Při vyvolání funkce done_dialog s výše uvedenými hodnotami dojde k vyvolání příslušných akcí. Běh funkce vyskočí ze smyčky a dialogový box je odstraněn z paměti.
![]()