Hallo Jürgen,
der KEY deiner Dialogbox sollte auch in Anführungszeichen |Key="h";| stehen.
in der LISP mußt Du dann folgende Zeile einfügen (vor dem (start_dialog):
(action_tile "h" "(setq h (get_tile \"h\"))")
Zu beachten ist, dass der Rückgabewert generell ein STRING ist. Bei Zahlen sollte man dann mit
(setq h (atof h))
oder
(setq h (atoi h))
den String in eine Zahl (real oder int) konvertieren.
In der LISP fehlt mir allerdings noch die Abfrage der OK-Abbrechen Buttons.
Das geht auch mit (action_tile ...) Die Key-Werte sind:
OK: "accept"
Abbrechen: "cancel"
Also kann es heißen:
(action_tile "accept" "(setq h (get_tile \"h\"))(done_dialog 1)")
(action_tile "cancel" "(setq h (get_tile \"h\"))(done_dialog 0)")
Die 0 bzw die 1 als Wert für das (done_dialog) bewirken eine Erkennungsmöglichkeit, wie das Dialogfenster beendet wurde.
Möchte man das nutzen, dann muss der (start_dialog)-Aufruf-Status einer Variablen zugewiesen werden.
(setq dcl_end (start_dialog))
Man kann nun unterscheiden:
(cond
((= dcl_end 1);ok geklickt
(unload_dialog dcl_id)
...weitere Anweisungen
)
((= dcl_end 0);Abbrechen geklickt
(unload_dialog dcl_id)
...Verzweigung zum Programmende
)
Jetzt ist es ein wenig durcheinander deshalb noch einmal zusammen:
(defun C:HALLO( / dcl_id )
(setq dcl_id (load_dialog "T.dcl"))
(if (not (new_dialog "T" dcl_id))
(exit)
)
(action_tile "h" "(setq h (get_tile \"h\"))")
(action_tile "accept" "(setq h (get_tile \"h\"))(done_dialog 1)")
(action_tile "cancel" "(setq h nil)(done_dialog 0)")
(setq dcl_end (start_dialog))
(cond
((= dcl_end 1);ok geklickt
(unload_dialog dcl_id)
(alert (strcat "H: " (rtos h 2 2)))
(princ h) ; Wert von h aus DCL soll angezeigt werden !
)
((= dcl_end 0);Abbrechen geklickt
(alert "Abbrechen wurde geklickt!")
(unload_dialog dcl_id)
)
(princ)
)
Bei Fragen ...
Grüße Holger
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP