• Dieses Forum ist die maschinengenerierte Übersetzung von www.cad3d.it/forum1 - der italienischen Design-Community. Einige Begriffe sind nicht korrekt übersetzt.

Input solo numerico input_box DCL

  • Ersteller Ersteller acitano
  • Erstellt am Erstellt am

acitano

Guest
Guten Morgen.
Ich müsste eine Edit_box-Arbeit machen, damit nur ganze oder echte Zahlen akzeptiert werden.
Ich bin gut, aber ich möchte überwältigen, ich möchte, dass Sie den Fehler abfangen, wenn der Benutzer zum Beispiel .2 anstelle von 0,2 eingibt.
oder ,2 statt 0,2.
im Grunde, wenn ich den Punkt einfügen, wie der erste Autocad-Charakter mich beantwortet:

Punkt in falscher Position in Eingabe

Ich möchte vielmehr meine dcl verstehen, dass sie .2 in 0,2 oder ,2 in 0,2 verwandeln muss.
Ich hoffe, dass ich genug erklärt habe, hier ist meine Lispe:
Code:
(Defun c:test()
(setq num 5 Durchgang nil)
(setq Dialog)
(> 2 num)
(wenn (new_dialog "stair" Dialog))))
(action_tile "width" (setq nwidth)
(box_generic_click)
Nlarghes
\"Breite\"
\"Wert oder falsch\"
Geben Sie eine vollständige oder echte Nummer ein
♪
\"Eingangsbreite\"
'
'real' '
)
(action_tile "accept" (progn)
(Abschnitt t)
(done_dialog 0)
)
(action_tile "cancel" (setq passage nil) (done_dialog 0))
(setq num(start_dialog))
)
(unload_dialog Dialog)
(princ)
)
---------------------------------------------------------------------------------------------------------------
(defun box_generico_click(fliesenwert m1 m2 m3 msgtit type1 type2 / value_old)
(setq value_old value)
(Seq-Wert(read(get_tile tile))))
(falls(oder(=(Typwert) Typ1)(=(Typwert) Typ2))
Wert
(Progn)
;(Druck(Typwert)
;(Druckwert)
(Lspokonly m1 m2 m3 msgtit)
(cond)
(=(Typ Value_old) 'int) (set_tile tile (rtos value_old 2 0)))
(=(Typ value_old) 'real)(set_tile tile (rtos value_old 2))))
(=(Typ value_old) 'str) (set_tile value_old)
(c)
)
(mode_tile tile 2); Fokus auf die gleiche Kachel
Wertberichtigung
)
)
)
und hier ist mein dcl:
Code:
: Dialog {
Schlüssel = "titolo";
:row{
:Spalte
:Taste = "vis_pianta"; Etikett = "pianta";}
:boxed_column {\cHFFFF}
Breite = 30;
Label = "parametri generali";
: Zeile {
: Text {Breite = 7; Wert = "larghezza" ;}
: edit_box {width = 5; key = "larghezza"; edit_width = 5 ;}
: Text {Breite = 10; Wert = "lunghezza"
: edit_box {width = 5; key = "lunghezza"; edit_width = 5 ;}
}
}
}
}
ok_cancel;
}
 
Ich würde tun, wie im Code unten, ein schönes Destof und ein vl-string-Substrate und vergeht Angst.
Ich habe andere wahrscheinliche Lösungen nicht bewertet, denn heute ist Sonntag und ich war in Eile. Ich hoffe, es funktioniert
Code:
(defun box_generico_click(poose toe m1 m2 m3 msgtit tipo1 tipo2 / valore_old)
(setq valore_old valore)
;;(setq valore(read(get_fore toe)))
(setq valore(vl-string-subst "."," (get_toe toe)))
(falls (distof valore)
wlore
(Prog.)
;(Druck(Art wlore))
;(Druck wlore)
(Lspokonly m1 m2 m3 msgtit)
(cond)
(=(Typ valore_old) 'int) (set_fore toe (rtos valore_old 2 0))))
(=(Typ valore_old) (set_fore toe (rtos valore_old 2 (getvar "luprec")))))))))
(=(Typ valore_old) 'str) (set_fore toe valore_old)
(t nil)
)
(mode_fore toe 2); fokus sullo steso fore
Valore_old
)
)
)
 
Domenic guten Abend,
Ich danke Ihnen sehr.
Ich habe eine Zeile hinzugefügt, die mir erlaubt, die edit_box neu zu kompilieren, so dass immer die "0" Null vor allen Zeiten einfügen, dass ein Punkt oder Komma als erstes Zeichen eingefügt wird:
Code:
(defun box_generico_click(fliesenwert m1 m2 m3 msgtit type1 type2 / value_old)
(setq value_old value)
(Setq-Wert (vl-string-subst "."," (get_tile tile))
(falls (Wert)
(if(wcmatch value ".*") (set_tile tile(strcat "0." (substr value 2))); dies ist die addierte Zeile
(Progn)
(Lspokonly m1 m2 m3 msgtit)
(cond)
(=(Typ Value_old) 'int) (set_tile tile (rtos value_old 2 0)))
(=(Typ value_old) 'real)(set_tile tile (rtos value_old 2))))
(=(Typ value_old) 'str) (set_tile value_old)
(c)
)
(mode_tile tile 2); Fokus auf die gleiche Kachel
Wertberichtigung
)
)
)
 
für Vollständigkeit Ich füge auch die lspokonly Funktion hinzu, sonst verstehen Sie den Code nicht.
Ich beschrieb auch die Quelle, aus der ich Inspiration genommen habe, Afralisp, eine Mine für mich.
Code:
(defun lspokony (message1 message2 message3 hand)
(setq dcl_id (load_dialog "funzioni_comuni.dcl"))
(wenn nicht (new_dialog "lspokolly" dcl_id))(exit))
(set_tile "message1" message1)(set_tile "message2" message2)(set_tile "message3" message3)(set_tile "hand" hand)
(tile_action "yes" "(done_dialog)")
(start_dialog)(unload_dialog dcl_id)(princ)
Ergebnis
)
Hier ist die dcl:
Code:
---------------------------------------------------------------------------------------
// feinstra: lspokonly
---------------------------------------------------------------------------------------
// descrizione: autoesplicativa, propone una finestra di dialogo con solo ok
---------------------------------------------------------------------------------------
// fonti: http://www.afralisp.net/dialog-control-language/tutorials/the-autolisp-message-box.php
---------------------------------------------------------------------------------------
// versioni: 1 02/02/2018
lspokonly: Dialog {
Schlüssel = "main";
: Spalte {
: Text {key = "message1";width=50;}
: Text {key = "message2";width=50;}
: Text {key = "message3";width=50;}
}
: Zeile {
: Abstandhalter { Breite = 1; }
: Taste {label = "ok";key = "accept"; Breite = 12;fixed_width = true;mnemonic = "o";is_default = true;alignment = center;}
: Abstandshalter { Breite = 1;}
}
}
 

Statistik des Forums

Themen
58.521
Beiträge
499.056
Mitglieder
104.110
Neuestes Mitglied
ChristianR

Zurzeit aktive Besucher

Keine Mitglieder online.
Zurück
Oben