Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Eingabe im Editfeld beschränken
rob87 - Mi 23.01.08 17:42
Titel: Eingabe im Editfeld beschränken
Hallo
ich will mein Editfeld auf die Eingabe von Hex-Zahlen beschränken
Dass ist mein Ansatz:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| if not (Key in ['0'..'9', Char(VK_BACK)]) then begin messagedlg('Bitte geben Sie nur Zahlen im Wertebereich von 0-9 bzw. A-F ein',mtInformation,[mbOK],0); Key := #0; end; end; |
So funktionierts. Nur dass halt die Buchstaben A-F ned erlaubt sind. Aber auch wenn ich dahinter die Buchstaben, A-F eintrage, macht er nichts anderes??
Delphi-Quelltext
1:
| if not (Key in ['0'..'9','A..F', Char(VK_BACK)]) then |
Moderiert von
Gausi: Topic aus Sonstiges (Delphi) verschoben am Mi 23.01.2008 um 16:47
Gausi - Mi 23.01.08 17:47
Vielleicht so?
Delphi-Quelltext
1:
| if not (Key in ['0'..'9','A'..'F', 'a'..'f', Char(VK_BACK)]) then |
rob87 - Mi 23.01.08 17:47
Hat sich erledigt. Hab die Kleinschreibweise genommen. In der Liste aber die Großschreibweise ausgeschlossen. ;-)
Aber nun nochwas? Wie kann einstellen, dass er in einem Edit-Feld Buchstaben automatisch groß macht?
Mitmischer 1703 - Mi 23.01.08 17:49
Geht nicht, "manuell" so:
rob87 - Mi 23.01.08 17:53
OK. Und dass müsst ich in mein Edit1KeyPress ganz oben anordnen??
Vor den ganzen Überprüfungen auf den Inhalt, oder?
Aber versteh noch ned, wie ich den Befehl einbind?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure Tfrmzahlenwandeln.Edit1KeyPress(Sender: TObject; var Key: Char); begin
if not (Key in ['0'..'9','a'..'f','A'..'F', Char(VK_BACK)]) then begin messagedlg('Bitte geben Sie nur Zahlen im Wertebereich von 0-9 bzw. A-F ein',mtInformation,[mbOK],0); Key := #0; end; end; end; |
Gausi - Mi 23.01.08 17:57
Ich würds mal so probieren:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| case key of '0'..'9': ; 'a'..'f': key := key + 26; 'A'..'F': ; else begin key := #0; end; end; |
Mitmischer 1703 - Mi 23.01.08 17:57
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure Tfrmzahlenwandeln.Edit1KeyPress(Sender: TObject; var Key: Char); var key2 : String; begin key2 := AnsiUpperCase (String(Key)); if not (Key in ['0'..'9','a'..'f','A'..'F', String(VK_BACK)]) then begin messagedlg('Bitte geben Sie nur Zahlen im Wertebereich von 0-9 bzw. A-F ein',mtInformation,[mbOK],0); Key := #0; end; end; end; |
Glaub' ich :nixweiss:
Yogu - Mi 23.01.08 18:04
Und was machst du dann mit
Key2? Du weißt dieser Variable den großgeschriebenen Wert zu, verwendest ihn jedoch nicht mehr.
Was du machen könntest, wäre den
kompletten Inhalt des Editfeldes großzuschreiben:
Delphi-Quelltext
1:
| Edit1.Text := UpperCase(Edit1.Text); |
Das Problem ist jedoch, dass der Cursor an den Anfang gesetzt wird. Du musst noch kontrollieren, wo der Cursor vorher war, und ihn dann am Ende wieder an die richtige Stelle setzen.
rob87 - Do 24.01.08 08:58
Also zusammengefasst entweder mit der Variante mit "Key2" oder mit nem Case ??
Miri - Do 24.01.08 09:17
Habs nicht ausprobiert, aber kann man nicht einfach
Delphi-Quelltext
1: 2: 3:
| Key := AnsiUpperCase(String(Key)); if not (Key in ['0'..'9','A..F', Char(VK_BACK)]) then |
machen?! :gruebel:
rob87 - Do 24.01.08 09:20
Miri hat folgendes geschrieben: |
Habs nicht ausprobiert, aber kann man nicht einfach
Delphi-Quelltext 1: 2: 3:
| Key := AnsiUpperCase(String(Key)); if not (Key in ['0'..'9','A..F', Char(VK_BACK)]) then |
machen?! :gruebel: |
Wär des Einfachste. :D Probiers nachher gleich mal aus. ;)
Kroko - Do 24.01.08 09:42
ev. aller Steuerzeichen zulassen?
Delphi-Quelltext
1: 2:
| Key := AnsiUpperCase(String(Key)); if not (Key in [#01..#31,'0'..'9','A..F']) then ... |
Gausi - Do 24.01.08 09:46
Es ging im weiteren Verlauf auch darum, wie man ein 'f' zu einem 'F' im Editfeld machen kann, und da brauch man dann etwas mehr ;-)
rob87 - Do 24.01.08 09:48
Delphi-Quelltext
1:
| Key := AnsiUpperCase(String(Key)); |
Funktioniert nicht. Fehlermeldung: Inkompatible Tpyen Char und String :(
Kroko hat folgendes geschrieben: |
ev. aller Steuerzeichen zulassen?
Delphi-Quelltext 1: 2:
| Key := AnsiUpperCase(String(Key)); if not (Key in [#01..#31,'0'..'9','A..F']) then ... | |
Warum sollt ich Steuerzeichen zulassen? Gibts irgendwo ne Liste, wo sämtliche Steuerzeichen unter Delphi aufgelistet sind? Also #01 - #31 oder noch mehr?
Aber ich kann die Tab-Taste verwenden, ich kann die Pfeiltasten verwenden, des reicht eg.
Erichgue - Do 24.01.08 11:31
rob87 hat folgendes geschrieben: |
Delphi-Quelltext 1:
| Key := AnsiUpperCase(String(Key)); |
Funktioniert nicht. Fehlermeldung: Inkompatible Tpyen Char und String :(
|
Key ist vom Typ Char und nicht Zuweisungskompatibel mit String.
Delphi-Quelltext
1: 2: 3: 4: 5:
| Var fText : String; begin fText := AnsiUpperCase(String(Key)); Key := fText[1]; end; |
Kroko hat folgendes geschrieben: |
ev. aller Steuerzeichen zulassen?
Delphi-Quelltext 1: 2:
| Key := AnsiUpperCase(String(Key)); if not (Key in [#01..#31,'0'..'9','A..F']) then ... |
Warum sollt ich Steuerzeichen zulassen? Gibts irgendwo ne Liste, wo sämtliche Steuerzeichen unter Delphi aufgelistet sind? Also #01 - #31 oder noch mehr?
Aber ich kann die Tab-Taste verwenden, ich kann die Pfeiltasten verwenden, des reicht eg. |
Nimm dir eine ANSI-Tabelle. Die Werte der Steuerzeichen sind identisch mit den #xx Nummern.
Erich
jaenicke - Do 24.01.08 11:33
Kroko hat folgendes geschrieben: |
ev. aller Steuerzeichen zulassen?
Delphi-Quelltext 1: 2:
| Key := AnsiUpperCase(String(Key)); if not (Key in [#01..#31,'0'..'9','A..F']) then ... | |
Dies ist OnKeyPress (sonst wäre Key kein Char). Und in OnKeyPress kannst du die Steuerzeichen ignorieren, diese werden
nur abgewürgt, wenn du sie in OnKeyDown/OnKeyUp mit Key := 0 entfernst ;-).
Miri - Do 24.01.08 11:34
Erichgue hat folgendes geschrieben: |
rob87 hat folgendes geschrieben: | Delphi-Quelltext 1:
| Key := AnsiUpperCase(String(Key)); |
Funktioniert nicht. Fehlermeldung: Inkompatible Tpyen Char und String :(
|
Key ist vom Typ Char und nicht Zuweisungskompatibel mit String.
|
Dann vielleicht so?!
Delphi-Quelltext
1:
| Key := Char(AnsiUpperCase(String(Key))); |
:gruebel: ;-)
rob87 - Do 24.01.08 11:38
Miri hat folgendes geschrieben: |
Dann vielleicht so?!
Delphi-Quelltext 1:
| Key := Char(AnsiUpperCase(String(Key))); |
|
So gehts nicht.
Aber so:
Erichgue hat folgendes geschrieben: |
Delphi-Quelltext 1: 2: 3: 4: 5:
| Var fText : String; begin fText := AnsiUpperCase(String(Key)); Key := fText[1]; end; |
|
Vielen Dank ;) :D
jaenicke - Do 24.01.08 11:48
Dieses ist doch die einfachste und beste Lösung. Das ist allerdings irgendwie immer so, dass die besten Lösungen ignoriert werden...
Gausi hat folgendes geschrieben: |
Ich würds mal so probieren:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| case key of '0'..'9': ; 'a'..'f': key := key + 26; 'A'..'F': ; else begin key := #0; end; end; | |
rob87 - Do 24.01.08 11:54
jaenicke hat folgendes geschrieben: |
Dieses ist doch die einfachste und beste Lösung. Das ist allerdings irgendwie immer so, dass die besten Lösungen ignoriert werden...
Gausi hat folgendes geschrieben: | Ich würds mal so probieren:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| case key of '0'..'9': ; 'a'..'f': key := key + 26; 'A'..'F': ; else begin key := #0; end; end; | |
|
Jein. Also ich find die andere Variante "einfacher". Ob sie jetzt von der Vorgehensweise sinnvoller oder weniger sinnvoll ist, kann ich nicht beurteilen. Aber nochmal danke an alle.
*Thread schließ*
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!