Práce s dialogovým boxem

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
)

Vysvětlení kódu funkce

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.

Poznámka - standardní přiřazení hodnot parametru done_dialog

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.