| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Listbox bei offener Dialogbox ! (1160 mal gelesen)
|
Juergen55 Mitglied Elektrotechniker
Beiträge: 282 Registriert: 08.03.2001
|
erstellt am: 22. Feb. 2006 16:20 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich will eine Listbox bei offener Dialogbox aktualisieren, also einen Wert der Liste hinzufügen mittels Button, das geht auch aber die Aktualisierung bei offenem Dialog geht nicht, der Code sieht so aus: (set_tile "lb" (rtos sn 2 4)) ;List_Box (mode_tile "lb" 2) (action_tile "m1" "(setq mml (cons wert1 mml))(set_tile \"lb\" (nth sn mml))") Der Button ist m1 die Listbox lb, mml die Liste der Listbox Gruß, Jürgen
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADwiesel Moderator CAD4FM UG
Beiträge: 1968 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 23. Feb. 2006 07:57 <-- editieren / zitieren --> Unities abgeben: Nur für Juergen55
|
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1734 Registriert: 11.10.2004 Window 10 ACAD 2021 CIVIL 2021 BricsCAD V14-V22 Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz 16.0GB RAM NVIDIA GeForce GTX 1050<P>
|
erstellt am: 23. Feb. 2006 08:11 <-- editieren / zitieren --> Unities abgeben: Nur für Juergen55
@ Cadwiesel ich denke schon, ich bin sogar der Meinung, das die action_tile-Anweisung von Jürgen eigentlich funktionieren müßte. @ Jürgen Was passiert, wenn Du den Button "m1" drückst, wird die action_tile-Anweisung ausgeführt und die enthaltene set_tile-Anweisung greift nicht, oder wird action_tile-Anweisung gar nicht ausgeführt??? ------------------ viele Grüße Jörn Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Juergen55 Mitglied Elektrotechniker
Beiträge: 282 Registriert: 08.03.2001
|
erstellt am: 23. Feb. 2006 08:31 <-- editieren / zitieren --> Unities abgeben:
Hallo, ja der action_tile funktioniert, teilweise auch set_tile, wenn ich m1 drücke springt er auf eine anderen Eintrag in der Listbox aber der neue Wert der Liste wird halt nicht in die Listbox übernommen, Danke für Eure Überlegungen ! Gruß, Jürgen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1734 Registriert: 11.10.2004 Window 10 ACAD 2021 CIVIL 2021 BricsCAD V14-V22 Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz 16.0GB RAM NVIDIA GeForce GTX 1050<P>
|
erstellt am: 23. Feb. 2006 08:45 <-- editieren / zitieren --> Unities abgeben: Nur für Juergen55
Hallo Jürgen, na das hört sich aber nicht so an, als wenn Du wiklich weiter gekommen bist. Was heißt bei Dir "teilweise"?? Ich bin immer der Meinung geht oder geht nicht. Wenn er auf einen anderen Eintrag springt: Du kannst z.B. in die Action_tile-Anweisung auch (mode_tile "lb" 2)mit einbinden, dann ist die Listbox "lb" wieder die Vorgabe und der Eintrag ist markiert. Wenn Du ein bißchen mehr Quelltext hier reinstellst kann ich ja nochmal rüberschauen. ------------------ viele Grüße Jörn Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4171 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 23. Feb. 2006 09:22 <-- editieren / zitieren --> Unities abgeben: Nur für Juergen55
Hallo jürgen, ihr seid in die vollkommen falsche Richtung unterwegs. Listen in Dialogfenstern lasen sich nur mit ADDLIST manipulieren. Also immer der gleiche Rattenschwanz: (startlist ..);HIER kann man mit einem Parameter festlegen, ob die Liste vollkommen neu aufgebaut wird oder die Einträge einfach angefügt werden. (mapcar 'addlist LISTEderWERTE) (endlist) Dafür bastelst du dir am besten eine SUB, die du dann eben bei einem bestimmten (action ..) aufrufst. Grüße Holger ------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1734 Registriert: 11.10.2004 Window 10 ACAD 2021 CIVIL 2021 BricsCAD V14-V22 Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz 16.0GB RAM NVIDIA GeForce GTX 1050<P>
|
erstellt am: 23. Feb. 2006 09:32 <-- editieren / zitieren --> Unities abgeben: Nur für Juergen55
@ Holger und Jürgen jaja, man sollte schon genau lesen, ich war gedanklich bei einer edit_box. Also Jürgen, ich nehme alles zurück was ich gesagt habe, es geht wie es in Holger's Beitrag zu lesen ist. ------------------ viele Grüße Jörn Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Juergen55 Mitglied Elektrotechniker
Beiträge: 282 Registriert: 08.03.2001
|
erstellt am: 23. Feb. 2006 16:19 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich denke mal CADWiesel hat recht, bei offenem Dialog geht es wirklich nicht, oder ich bin zu blöd dazu. Trotzdem geht es jetzt, ich hab eine While-Schleife drum herum gebaut, die den Dialog noch einmal aufruft. Danke für Eure Mühe !! Gruß, Jürgen ------www.pc-ideal.de
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1734 Registriert: 11.10.2004 Window 10 ACAD 2021 CIVIL 2021 BricsCAD V14-V22 Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz 16.0GB RAM NVIDIA GeForce GTX 1050<P>
|
erstellt am: 23. Feb. 2006 18:35 <-- editieren / zitieren --> Unities abgeben: Nur für Juergen55
Hallo Jürgen, probier es doch so: Aus der action_tile Anweisung ruftst Du die Subroutine "list_aktuell" auf und übergibst die Liste "mml". (action_tile "m1" "(setq mml (cons wert1 mml))(list_aktuell mml)") (defun list_aktuell (mml / ) (start_list "lb" 3 0) (mapcar 'add_list mml) (end_list)) ------------------ viele Grüße Jörn Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4171 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 24. Feb. 2006 06:43 <-- editieren / zitieren --> Unities abgeben: Nur für Juergen55
Zitat: Original erstellt von Juergen55: ich denke mal CADWiesel hat recht, ...
Falsch! Ich habe mal schnell ein Bsp zusammengebaut, welches dir die Funktion erklären sollte. Mit dem [Zurücksetzen]-Button kannst du die Liste vollständig überschreiben, und mit dem [Hinzufügen]-Button fügst du einen Eintrag der Liste hinzu. Beides funktioniert ohne den komplizierten Weg des erneuten Aufrufs der Dialogbox. Oftmals wird von den Anfängern der Fehler gemacht, dass zwar die Liste im Dialogfeld geändert wird, aber der aktuelle Aufbau der Liste nicht in der entsprechenden Variablen mitgeschrieben wird. Auch das habe ich in der Bsp-Funktion implementiert. Beantwortest du die Frage ob der Dialog erneut gestartet werden soll mit Ja, dann werden in der Liste auch die hinzugefügten Einträge mit angezeigt. Code als *.lsp speichern und die liste.dcl erstellen!
Code: (vl-load-com) (defun c:diatest (/ ergebnis antw) (setq ergebnis (dcl:Liste_edit "Vornamen" '("Hans" "Max"))) (princ ergebnis) (initget "Ja Nein") (setq antw (getkword "\nDialog erneut starten [Ja/Nein]? <N>:")) (if (= antw "Ja")(dcl:Liste_edit "Vornamen" ergebnis)) (princ) ) (defun dcl:Liste_edit (BESCHREIBUNG WERTE / dcl_id ns VALUES) (setq VALUES WERTE dcl_id (load_dialog "liste.dcl")) (if (not (new_dialog "LI_ED" dcl_id)) (exit) ) (dcl:LI_SET "LI" WERTE nil) (action_tile "RESET""(setq WERTE (dcl:LI_SET \"LI\" VALUES nil))") (action_tile "ADD""(setq WERTE(dcl:LI_SET \"LI\" (list (get_tile \"ED\")) WERTE))") (action_tile "cancel""(done_dialog 0)") (action_tile "accept""(done_dialog 1)") (setq ns (start_dialog)) (unload_dialog dcl_id) (if (= ns 1) WERTE) ) (defun dcl:LI_SET (KEY VALUES APPEND?) ;KEY-Listenname = STR ;VALUES-Werte der Liste = LIST ;APPEND?-Neu oder anhängen = nil-NEU ; = LIST- Werte der bereits vorhandenen Listeneinträge (setq VALUES (vl-remove-if '(lambda (E) (= "" (vl-string-trim " " E)) ) VALUES) ) (start_list KEY (if APPEND? 2 3)) (mapcar 'add_list VALUES) (end_list) (if APPEND? (append APPEND? VALUES) VALUES) );| FF-> DCL-DATEI Liste.dcl LI_ED : dialog { label = "Auswahl"; : text { key = "TXT"; label = "Was wird gewählt"; } : list_box { width = 18; height= 20; key = "LI"; multiple_select=true; } : button { label = "Zurücksetzen"; key = "RESET"; } : text { label = "Neuer Wert:"; } : row { : edit_box { key = "ED"; } : button { label = "Hinzufügen"; key = "ADD"; } } ok_cancel; } |;
Bei Fragen ... Grüße Holger ------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Juergen55 Mitglied Elektrotechniker
Beiträge: 282 Registriert: 08.03.2001
|
erstellt am: 25. Feb. 2006 00:02 <-- editieren / zitieren --> Unities abgeben:
Hallo Holger, ich hatte bis jetzt keine Zeit mehr mir das anzuschauen, so geht das also doch, und Du bist sogar völlig ohne set_tile ausgekommen. Dein Code ist schon eine Klasse für sich, nicht schlecht, so einfach kann es sein ! Gruß, Jürgen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |