Autor |
Beitrag |
noo.bee
      
Beiträge: 120
|
Verfasst: Di 11.05.10 18:54
hallo
ich habe hier sehr viele edit-felder und wollte die nun soweit beschränken, dass man dort z.b. nur A-M oder 1-15 eingeben kann. es sit zwar möglich, edits auf nur zahlen zu reduzieren, dass würde mir aber nicht reichen. wie kann ich das weiter einschränken ?
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 11.05.10 18:59
Du kannst in OnKeyPress prüfen ob die Eingabe gültig ist und sie ansonsten verwerfen.
Dazu gibt es auch viele Beiträge bereits, das Prinzip ist überall das gleiche:
www.delphi-forum.de/...raenken_80205,0.html
|
|
noo.bee 
      
Beiträge: 120
|
Verfasst: Di 11.05.10 20:03
sieht gut aus... aber ich habe 72 editfelder. die alle einzeln einzutippen wäre megaumständlich
Delphi-Quelltext 1: 2: 3: 4: 5:
| case edit1.text of '0'..'49': ; >49: tue irgendwas end; end; |
|
|
Chemiker
      
Beiträge: 194
Erhaltene Danke: 14
XP, Vista 32 Bit, Vista 64 Bit, Win 7 64 Bit
D7, BDS 2006, RAD Studio 2009+C++, Delphi XE2, XE3, VS 2010 Prof.
|
Verfasst: Di 11.05.10 20:08
Hallo noo-bee,
dann erstell Dir doch eine eigene TEdit-Komponente und bau dir die Eingabeprüfung mit ein, eine andere alternative ist die Komponente TMaskEdit.
Bis bald Chemiker
|
|
ALF
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: Di 11.05.10 20:11
Du kannst alle onkeypress events auf ein editfeld setzen und fragst ab, von welchen editfeld die Eingabe kommt.
Nun kannst Du auch die Case-anweisung expliziet der jeweiligen Editkomponente zuweisen!
Gruss Alf
_________________ Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
|
|
noo.bee 
      
Beiträge: 120
|
Verfasst: Di 11.05.10 20:18
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 11.05.10 20:37
Delphi-Quelltext 1: 2:
| if Sender is TEdit then TEdit(Sender).Text ... | So kannst du das mit dem Edit machen, das das Ereignis ausgelöst hat. Und diese eine Ereignismethode stellst du für alle Edits ein.
|
|
ALF
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: Di 11.05.10 20:45
hier mal ein kleines Beispiel
allerdings musst Du noch Edit1-76 'Tag' mit laufender Nummer versehen!
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); function keyszahlen(key: char) :char; begin case key of '0'..'9': ; else key := #0; end; result:= key; end; function keysBuchstaben(key: char) :char; begin case key of 'a'..'z': ; else key := #0; end; result:= key; end; begin
case Tedit(sender).Tag of 1..2: key:=keyszahlen(key); 3: key:=keysbuchstaben(key); end; end; |
gibt sicherlich auch noch ne schönere Lösung! Soll ja nur als Beispiel dienen
Gruss Alf
_________________ Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
|
|
noo.bee 
      
Beiträge: 120
|
Verfasst: Do 13.05.10 17:50
so, hab mich entschieden es nur auf einen zahlenbereich zu reduzieren (1-150). sieht jetzt so aus
Delphi-Quelltext 1: 2: 3:
| if strtoint(edit1.Text) > 150 then ShowMessage('Was ist ' + edit1.text + ' für eine Zahl? Bitte Ergebnis löschen und neu checken'); edit1.Text := '0'; |
kann ich das nutzen und irgendwie für alle edits vereinfachen ? weil ich das bei meiner variante ja auch wieder für jedes edit eingeben muss.
gibts sowas wie
if strtoint(edit1.text .. edit150.text) > 150 then ?
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Do 13.05.10 17:53
Du könntest allen Edits den selben ereignishandler zuweisen und dann schreiben:
Delphi-Quelltext 1: 2: 3: 4: 5:
| if (Sender is TEdit) then begin if strtoint((Sender as TEdit).Text) > 150 then ShowMessage('Was ist ' + (Sender as TEdit).text + ' für eine Zahl? Bitte Ergebnis löschen und neu checken'); (Sender as TEdit).Text := '0'; end; |
Ereignisshandler weißt du so zu das du nicht doppelt in das feld beim Objektinspektor reinklickst, sonder auf den pfeil rechts daneben und die passende Methode aus der DropDown-Liste auswählst.
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|