Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Rund um AutoCAD
  Dialogfelder verwenden, Wert einer Variablen ?

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Dialogfelder verwenden, Wert einer Variablen ? (146 mal gelesen)
Juergen151
Mitglied
Elektrotechniker

Sehen Sie sich das Profil von Juergen151 an!   Senden Sie eine Private Message an Juergen151  Schreiben Sie einen Gästebucheintrag für Juergen151

Beiträge: 1
Registriert: 06.01.2002

erstellt am: 06. Jan. 2002 22:04    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,

wie kann ich in AutoCAD den Wert einer Variablen aus einem Dialogfeld weiter verwenden. Also ich gebe im Eingabefeld eines Dialogfeldes einen Wert ein der einer Variablen h zugewiesen ist. Diesen Wert möchte ich dann in der dazugehörigen AutoLisp-Routine weiterverwenden ! Ich hab schon einiges ausprobiert funktioniert aber nicht richtig.
Ein paar Tips vom Experten zum Anfänger wären nicht schlecht !
Hier nun also meine Lisp-Routine + Dialogfeld :

Lisp:
(defun C:HALLO( / dcl_id )
  (setq dcl_id (load_dialog "T.dcl")) 
  (if (not (new_dialog "T" dcl_id))   
    (exit)                           
  )
(princ h)      ; Wert von h aus DCL soll angezeigt werden !
(start_dialog)                       
(unload_dialog dcl_id)               
)

Dialogfeld:
T : dialog {
  label = "Dialogfeld"; 
  : column {

:row{alignment=right;children_fixed_width=true;children_fixed_height=true;
:edit_box{label="Auschnitt";value="0";key=h;}}

: column {
      ok_cancel;             
      errtile;
  }
}   
}


Mfg Jürgen

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Brischke
Ehrenmitglied V.I.P. h.c.
CAD on demand GmbH



Sehen Sie sich das Profil von Brischke an!   Senden Sie eine Private Message an Brischke  Schreiben Sie einen Gästebucheintrag für Brischke

Beiträge: 4185
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools

erstellt am: 07. Jan. 2002 08:35    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Juergen151 10 Unities + Antwort hilfreich

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

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz