Allgemeine Fragen zur PROFAN Programmierung
Views (Heute): 252044 (13480)
  Suchen
 Zurück zur Übersicht
 AutorThema: Eingabe bei createedit prüfen
Fernando
Datum:09.10.02 16:47 Antwortenals Email verschicken (cityelectronica@netcabo.pt) 


Hallo

Ist es möglich die Eingabe beim Createeditfelder zur prüfen?
Also die Zahl die man eingibt muss ich bei der Eingabe testen ob es in einen gültigen Bereich ist.
Ich brauche es damit z. B. bei der Eingabe Irrtümlicherweise die Monatzahl nicht über 12 eingegeben werden kann.

Danke

Fernando




Alexander Schoenfeld
Datum:09.10.02 17:06 Antwortenals Email verschicken (alexander.schoenfeld@chronologic.de) 


Hallo Fernando,
hier ein kleines Beispiel:

 CLS

 Declare hEdit&, hBtn&
 Let hEdit& = CreateEdit(%hWnd, "Hallo", 10, 10, 121, 21)
 Let hBtn&  = CreateButton(%hWnd, "Prüfe", 10, 50, 121, 21)

 Declare Eingabe%

 While 1
   Waitinput
   If GetFocus(hBtn&)

     Let Eingabe% = Val(GetText$(hEdit&))

     If Gt(Eingabe%, 0) AND Lt(Eingabe%, 13)
       MessageBox("OK", "", 0)

     Else
       MessageBox("Bitte eine Zahl zwischen 1 und 12 eingeben", "Fehler", 16)

     EndIf


   EndIf

 Wend

 End


Es gibt übrigens noch eine Message mit der man veranlassen kann, das nur Zahlen in das Edit eingegeben werden können. Leider weiss ich selbige nicht auswendig, kann ich jedoch morgen abend nachreichen :)

--
Mit freundlichem Gruss / kind regards,
Alexander Schoenfeld

Email: alexander.schoenfeld@chronologic.de


Heiko Reddingius
Datum:09.10.02 17:52 Antwortenals Email verschicken (webmaster@nvse.de) 


Hi Fernando,

folgendes würde ich vorschlagen:
- begrenze das Feld auf eine bestimmte Länge. Um bei dem von Alexander genannten Beispiel zu bleiben, ergänze folgende Zeile vor dem WHILE:

SendMessage(hEdit&,$00C5,2,0)

Damit setzt Du das Limit auf zwei Zeichen für das entsprechende Eingabefeld und verhinderst damit schon mal Werte über 99 :-)

Außerdem müßtest Du die Prüfung noch automatisieren können - Alexander hat sie so gestaltet, daß Du sie seperat auslösen mußt. Über die Message em_GetModify sollte das ganze funktionieren. Ich bastel jetzt mal kurz einen Code zusammen, ohne Gewähr auf Garantie. Wieder basiernd auf dem vorherigen Beispiel kommt dann in die WHILE:

   WaitInput
   [...]
   ElseIf @Equ(@SendMessage(hEdit&,$00B8,0,0)
     SendMessage(hEdit&,$00B9,0,0)
     [Abfrage und Fehlermeldungen nach Wunsch]

Eventuell sollte man die Routine noch etwas agressiver gestalten, zum Beispiel statt einer MessageBox einfach die Eingabe löschen (SetText hEdit&,""), mit dem Höchstwert überschreiben oder etwas in der Richtung, sonst bringt das ganze nicht. Wichtig ist nur, nach dem Auslesen (Message $00B8) den Wert wieder zurückzusetzen (Message $00B9), sonst gibt es bei mir Probleme :) Das Ding ist jetzt keine vollständige Lösung, aber in meinen Augen ein guter Ansatz.

Alternative: Wenn Du wirklich nur wenige Elemente, wie z.B. Monate eingeben willst, verwende einfach eine Choicebox - die ist garantiert sicher und im Endeffekt wahrscheinlich unkomplizierter :)

Viele Grüße,
Heiko


Heiko Reddingius
Datum: 09.10.02 17:55 Antwortenals Email verschicken (webmaster@nvse.de) 


Nachtrag ... sorry, mein Fehler.

Eine vollständige(?) Liste der möglichen Message für Editfelder findet sich unter http://www.text2music.com/hima/doc/command/descript/339.htm - die Seite ist zwar auf japanisch, aber die Messagenamen auf Englisch und auf die kommt es an.

Gruß
HR


 Zurück zur Übersicht