| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY wird von NVIDIA zum Händler des Jahres gewählt – zum dritten Mal in Folge, eine Pressemitteilung
|
Autor
|
Thema: Eingabe prüfen in Dialogfeld (2103 mal gelesen)
|
dschu Mitglied techn. angestellter
Beiträge: 18 Registriert: 03.09.2002
|
erstellt am: 24. Jan. 2003 07:31 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, kann mir jemand kurz helfen? Ich mochte in einem Dialogfeld einen einzugebenen Wert (irgend eine Zeichenkette) abfragen. Ähnlich wie : " (initget 1 "J N") (setq EIN (getkword " Eingabe <J/N> : " ))" Geht das ? Ich hab noch nicht viel mit Dialogfeldern zu tun... Danke für einen Tipp und schönen Tag an alle! dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2494 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 24. Jan. 2003 08:35 <-- editieren / zitieren --> Unities abgeben: Nur für dschu
Hi, wenn Du kein Lust hast in die Tiefen von DCL einzusteigen, könnte ich Dir für solche Fälle eigentlich nur das "DosLib" von Robert McNeel empfehlen. Da gibt es unter anderem einige "GUI"-Funktionen. Auszug aus der DosLib-Help: dos_getstring Windows Dialog box equivalent to LISP getstring function. Syntax (dos_getstring title prompt [default [length]]) Parameters title A string containing the dialog box title. prompt A string containing a prompt. default A default string value. length A maximum character length limit. Returns A string value, if successful. nil on cancel or on error Examples Command: (dos_getstring "Text" "Enter some text") DosLib kannst du kostenlos unter: http://www.mcneel.com/cgi-bin/download.cgi?doslib runterladen. Ist 'ne Arx mit hervorragender Dokumentation der einzelnen Funktionen.
------------------ Ciao, Marc Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2494 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 24. Jan. 2003 08:43 <-- editieren / zitieren --> Unities abgeben: Nur für dschu
|
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 24. Jan. 2003 08:50 <-- editieren / zitieren --> Unities abgeben: Nur für dschu
Zitat: Original erstellt von dschu: Hallo zusammen,kann mir jemand kurz helfen? Ich mochte in einem Dialogfeld einen einzugebenen Wert (irgend eine Zeichenkette) abfragen. Ähnlich wie : " (initget 1 "J N") (setq EIN (getkword " Eingabe <J/N> : " ))" Geht das ? Ich hab noch nicht viel mit Dialogfeldern zu tun... Danke für einen Tipp und schönen Tag an alle! dirk
Hallo Dirk, du machst eigentlich wiedersprüchliche Aussagen. Die (initget ...) liefert ja nicht irgendeine Zeichenkette zurück. Wenn Du eine Zeichenkette, frei einzugebender Text, abfragen möchtest, dann ist das etwas anderes als die Abfrage "Wollen sie das wirklich tun? Ja-Nein" Da reicht dann wirklich ein Ja/Nein-Dialogfenster. Im anderen Fall, brauchst du noch ein Eingabefeld. Was möchtest Du? Grüße Holger
------------------ Holger Brischke CADlon - Lisp over night! Jetzt 25 Tools im FreeDownload Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 24. Jan. 2003 08:58 <-- editieren / zitieren --> Unities abgeben: Nur für dschu
|
dschu Mitglied techn. angestellter
Beiträge: 18 Registriert: 03.09.2002
|
erstellt am: 27. Jan. 2003 11:54 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich versuch noch mal meine Anfrage zu beschreiben: Mir ging es darum zu verstehen wie die Eingaben in einer Dialogbox verarbeitet bzw, geprüft werden können. Ich habe mir eine Dialogbox erstellt mit unterschiedlichen Eingabefeldern (Listenfeldern Pop-Up_Listemfeld etc.); das hat auch soweit funktioniert. Was ich noch nicht verstanden habe ist: Wie kann ich z.B. eine Eingabe in einem Listenfeld konkret prüfen: Anderes Beispiel: Ich möchte als Eingabe nur A, B oder C in Großbuchstaben (ob sinnvoll oder nicht...) zulassen; und Kleinbuchstaben und xyz etc.ausschließen... Soweit ich es verstanden habe ist der Ausgangspunkt der Prüfung oder Änderung immer die „action_tile“ Zeile ? Kann oder muß ich von da aus jetzt UnterProgramme „abzweigen“ oder wie oder was ?... Das hab ich aus den Beschreibungen noch nicht so richtig verstanden. Gruß dirk
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2494 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 27. Jan. 2003 12:30 <-- editieren / zitieren --> Unities abgeben: Nur für dschu
|
benwisch Mitglied Bautechniker, CAD-Konstrukteur
Beiträge: 375 Registriert: 01.02.2001
|
erstellt am: 27. Jan. 2003 12:44 <-- editieren / zitieren --> Unities abgeben: Nur für dschu
ich versuche mal zu helfen... Zitat: Original erstellt von dschu: Mir ging es darum zu verstehen wie die Eingaben in einer Dialogbox verarbeitet bzw, geprüft werden können. Ich habe mir eine Dialogbox erstellt mit unterschiedlichen Eingabefeldern (Listenfeldern Pop-Up_Listemfeld etc.); das hat auch soweit funktioniert. Was ich noch nicht verstanden habe ist: Wie kann ich z.B. eine Eingabe in einem Listenfeld konkret prüfen:
ein auszug aus meiner lü-berechnung... ein z.b. popup_list feld wird in lisp so gefüllt (möglicherweise gibt's noch mehrere mögl.) : (setq bwlü:betongüte (list (list "B25" "39.7") (list "B35" "32.5") (list "B45" "27.5") (list "B55" "23.8") ) ;_ end of list ) (setq bwlü:betongüte_gewählt "0");; für erstes element in liste ! (foreach temp bwlü:betongüte (setq bwlü:betongüte_t (cons (car temp) bwlü:betongüte_t) ; aus der temp Variable wird der erste Wert entnommen ..._t =Texte bwlü:betongüte_w (cons (cadr temp) bwlü:betongüte_w) ; hier nun der zweite Wert ..._w =Werte ) ;_ end setq ) ;_ end foreach ;; nun noch die Listen umkehren, denn sonst steht B25 als letztes (setq bwlü:betongüte_t (reverse bwlü:betongüte_t) bwlü:betongüte_w (reverse bwlü:betongüte_w) ) ;_ end of setq ;; füllen der Dialogfelder ;;------------------------ (start_list "bwlü_betongüte") (mapcar 'add_list bwlü:betongüte_t) (end_list) ;;-------------------------------------- (set_tile "bwlü_betongüte" "") ;; setze aktionen ;; ----------------- (action_tile "bwlü_betongüte" "(setq bwlü:betongüte_gewählt $VALUE)" ) ;_ end of action_tile es wird eine liste erstellt mit den auswahlmöglichkeiten B25, B35, B45, B55. parallel dazu werden in lisp zus. zu diesen "vorgaben" aus einer anderen liste der rechenfaktor bestimmt (..._w) ...vielleicht hilft dir das weiter...is' nur als vorschlag zu verstehen ! >>>nachtrag...<<< späteres auswerten/prüfen... (setq bwlü:betongüte_t (nth (atoi bwlü:betongüte_gewählt) bwlü:betongüte_t ) ; aus der listbox wird der nth'teil herausgeholt, also wenn B25, dann 0 ; B35, dann 1 bwlü:betongüte_w (nth (atoi bwlü:betongüte_gewählt) bwlü:betongüte_w ) ; parallel dazu aus der alten Variablen den Rechenwert ------------------ Grüße aus dem Rheingau. Rolf aka Benwisch
[Diese Nachricht wurde von benwisch am 27. Januar 2003 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 28. Jan. 2003 09:54 <-- editieren / zitieren --> Unities abgeben: Nur für dschu
Hi Dschu, mir ist es immer noch nicht ganz klar, worum es dir geht. Wenn der Benutzer aus {A, B, C} auswählen soll, dann setzt man diese drei Elemente in eine Listbox. Da gibt es doch überhaupt keine freie Eingabe! Die wäre in einer Combo-Box möglich (Combo = Kombination aus Listbox und Editfield), aber die Combo-Box hat AutoDesk doch 'vergessen'. Da muss man sich damit behelfen, das Ganze mit einer Listbox und einer Editbox selber zu emulieren. Wenn's darum geht, Eingaben in einer Editbox zu prüfen, dann ist das was ganz anderes. Da kann der User ja erstmal reinschreiben, was er will. Da kannst du über "action" eine Lisp-Funktion an die Editbox kleben, die jedesmal aufgerufen wird, wenn eine Eingabe erfolgt ist. Dann kannst du die Eingabe mit get_tile auslesen und prüfen. Allerdings musst du die Grenzen sehen: "action" ist mit dem identisch, was man in anderen Sprachen als LostFocus-Event bezeichnet. Alle anderen Events lassen sich in DCL nicht verarbeiten! Erst wenn der User auf ein anderes Dialogelement klickt oder TAB drückt, wird der Event ausgelöst. Eine Prüfung nach jedem eingetippten Buchstaben kann es also in DCL nicht geben! Auch die Maskierung von Eingaben fehlt in Proteus vollständig (in anderen Sprachen kannst du z.B. "99.99.99" für ein Datum oder "AAA-9999-@@" für eine Seriennummer o.ä. festlegen). Geht hier alles nicht. Du kannst nicht mal zur Laufzeit rauskriegen, ob ein Dialogelement enabled oder disabled ist usw. (get_attr klingt zwar erstmal nett, liefert aber gar nicht die aktuellen Werte, sondern die defaults bei Start des Dialogs). Die ganze DCL-Schnittstelle ist nun mal 10 Jahre alt und seit ihrem Erscheinen absolut nicht weiterentwickelt worden (Updates==NULL). Gruss, Axel
------------------ http://www.tutorial.autolisp.info
http://www.advanced.autolisp.info
http://www.activex.autolisp.info Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
dschu Mitglied techn. angestellter
Beiträge: 18 Registriert: 03.09.2002
|
erstellt am: 28. Jan. 2003 10:35 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von mapcar: Hi Dschu,Wenn's darum geht, Eingaben in einer Editbox zu prüfen, dann ist das was ganz anderes. Da kann der User ja erstmal reinschreiben, was er will. Da kannst du über "action" eine Lisp-Funktion an die Editbox kleben, die jedesmal aufgerufen wird, wenn eine Eingabe erfolgt ist. Dann kannst du die Eingabe mit get_tile auslesen und prüfen. Allerdings musst du die Grenzen sehen.... ... worden (Updates==NULL). Gruss, Axel
Danke an alle für die Antworten; Danke an Axel... mir ging es in der Tat um das, was im obigen Zitat beschrieben wurde. Ich denke, die Erklärungen von Axel helfen mir nun weiter Gruß dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |