Při tvorbě uživatelského rozhraní využívejte maximálně obrázku výsledného dialogového okna. Všímejte si hlavně hierarchického uspořádání jednotlivých prvků. Uspořádání vám pomůže při vlastní tvorbě dialogu.
![]()
Aby byl kód funkce co nejefektivnější, rozdělíme aplikaci na tři funkce:
Další doporučení:
![]()
Pro uživatele, kteří zabloudili při tvorbě kódu uvádíme jednotlivé ucelené části kódu. Pokud si nebudete jisti funkcí některého příkazu, stačí kliknout nad příkazem a zobrazí se Vám referenční příručka se zobrazeným příkazem.
zoom:dialog { // jméno nového dialogového boxu
label = "Změna měřítka";
// název vypsaný na otevřeném dialogu otevřeného dialogu
:boxed_row {
// uspořádání prvků do orámovaného řádku
label = "Zadání hodnoty";
// název orámované části vypsaný v dialogu
:boxed_column {
// uspořádání prvku do orámovaného sloupce
label = "Slider";
// název orámované části vypsaný v dialogu
:slider {
// definice vlastností dialogového prvku SLIDER
key = "slider";
// klíč sloužící k identifikaci dialogového prvku při
// programovém zpracování v AutoLISPu nebo ADSRX
min_value = 1;
// min. hodnota jezdce
max_value = 10;
// max. hodnota jezdce
}
}
:boxed_column {
// uspořádání prvku do orámovaného sloupce
label = "Edit box";
// název orámované části vypsaný v dialogu
:edit_box {
// definice vlastností dialogového prvku edit_box
key = "editbox";
// klíč sloužící k identifikaci dialogového prvku při
// programovém zpracování v AutoLISPu nebo ADSRX
}
}
}
:boxed_radio_column {
// orámovaná skupina radio_tlačítek
key = "vyber";
// klíč sloužící k identifikaci dialogového prvku
// při programovém zpracování v AutoLISPu nebo ADSRX
label = "Volba typu";
// název skupiny radio_tlačítek vypsaný v dialogu
:radio_button {
// definice vlastností dialogového prvku radio_button
key = "zvetseni";
// klíč sloužící k identifikaci dialogového prvku při
// programovém zpracování v AutoLISPu nebo ADSRX
label = "Zvětšení";
// název radio_tlačítka vypsaný v dialogu
}
:radio_button {
// definice vlastností dialogového prvku radio_button
key = "zmenseni";
// klíč sloužící k identifikaci dialogového prvku při
// programovém zpracování v AutoLISPu nebo ADSRX
label = "Zmenšení";
// název radio_tlačítka vypsaný v dialogu
}
}
ok_cancel;
// předdefinovaný dialogový prvek, zde tlačítka OK a CANCEL
}
![]()
(defun c:meritko ()
;;; definice nové funkce meritko
(setq id (load_dialog "d:/meritko.dcl"))
;;; předání jména dialogového boxu
(if (not (new_dialog "zoom" id))
(exit)
)
;;; v případě nesouhlasného jména dialogového
;;; panelu (v našem případě zoom - jméno na začátku
;;; souboru.dcl) ukončí činnost
(setq hodn 1)
;;; nastavení pomocné proměnné - hodnota zvěšení
(set_tile "vyber" "zvetseni")
;;; nastavení radiotlačítka "zvetseni" ze skupiny
;;; "vyber" na aktivní = zvýrazněné
(action_tile "slider" "(slider_action $value $reason)")
;;; získání hodnoty při aktivaci dialogového prvku
;;; "slider" a zavolání funkce slider_action
;;; s parametry hodnota a důvod
(action_tile "editbox" "(ebox_action $value $reason)")
;;; získání hodnoty při aktivaci dialogového prvku
;;; "editbox" a zavolání funkce ebox_action
;;; s parametry hodnota a důvod
(action_tile "zvetseni" "(setq radio 0)")
;;; při zmáčknutí radio_tlačítka "zvetseni"
;;; se nastaví proměnná radio na 0
(action_tile "zmenseni" "(setq radio 1)")
;;; při zmáčknutí radio_tlačítka "zmenseni" se
;;; nastaví proměnná radio na 1
(action_tile "accept"
"(progn
(done_dialog)
(setq ok 1)
)"
) ;;; při aktivaci tlačítka "accept" = OK se ukončí dial. box
;;; a nastaví se pomocná proměnná signalizující, že dial. box
;;; byl ukončen tlačítkem OK = potvrzení změn
(action_tile "cancel"
"(progn
(term_dialog)
(setq ok 0)
)"
) ;;; při aktivaci tlačítka "cancel" = ZRUS se ukončí
;;; dial. box a nastaví se pomocná proměnná signalizující,
;;; že dialogový box byl zrušen = nepotvrdit změny
(start_dialog)
;;; zahájen dialogu
(unload_dialog id)
;;; odstranění dialogu
;;; zpracování/nezpracování hodnot získaných z dial. boxu
(if (= ok 1)
;;; dialog ukončen OK:
(progn
(if (= radio 0)
;;; rozhodnutí zda zvětšovat/zmenšovat podle hodnoty
;;; radio_tlačítek
(command "zoom" "_S" hodn)
;;; zvětšení
(progn
(setq hodn (/ 1.0 hodn))
(command "zoom" "_S" hodn)
;;; zmenšení
)
)
)
;;; CANCEL:
(setq ok 0)
;;; vrácení pomocné proměnné na 0
)
)
Při vyvolání akce posuvníku SLIDER je nutné nastavit odpovídající hodnotu v
prvku EDIT_BOX. Toto nastavení vám umožní funkce slider_action:
(defun slider_action (val why)
;;; funkce, která v případě aktivace slideru nastaví
;;; odpovídající hodnotu v edit_boxu
(if (or (= why 2) (= why 1))
;;; v případě splněných podmínek nastav edit_box,
;;; 1 = zmáčknutí entru, 2 = selekce z edit_boxu
(progn
(set_tile "editbox" val)
;;; nastavení hodnoty v edit_boxu
(setq hodn (atoi val))
;;; nastavení pomocné proměnné hodnota zvětšení z proměnné
;;; val pomocí konverze_string -> integer
)
)
)
Při vyvolání akce textového pole EDIT_BOXu je nutné nastavit odpovídající hodnotu v prvku SLIDER. Toto nastavení Vám umožní funkce ebox_action:
(defun ebox_action (val why)
;;; funkce, která v případě aktivace edit_boxu nastaví
;;; odpovídající hodnotu na slideru
(setq hodn (atoi val))
;;; nastavení pomocné proměnné hodnota zvětšení z proměnné
;;; val pomocí konverze_string -> integer
(if (> hodn 10)
;;; v případě, že je hodnota zvětšení/zmenšení větší než 10
;;; (max. hodnota slideru), pak nastav zvětšení/zmenšení na 10
(progn
(setq val "10")
(set_tile "editbox" val)
)
)
(if (or (= why 2) (= why 1))
;;; v případě splněných podmínek nastav slider
;;; 1 = zmáčknutí entru, 2 = selekce z edit_boxu
(set_tile "slider" val)
)
)
![]()
![]()