![]() |
Eingabebedingungen
Hallo,
wir haben wieder eine Frage an euch: Wir haben eine Comboxbox und zwei Editfelder über die wir eine Containerbezeichnung hinzufügen wollen. Im zweiten Edit-Feld soll eine vierstellige Zahlen- und Buchstabenkombination eingegeben werden. Die Eingabebeschränkungen haben wir soweit hinbekommen aber manche Kombinationen funktionieren trotzdem nicht.. wie z.B 25G3. G kann mit den Zahlen 0,1,2 und 3 kombiniert werden, es lassen aber nur die Zahlen von 0-2 eingeben.
Delphi-Quellcode:
Dieser Quellcode bezieht sich jetzt nur auf das 3. und 4.Zeichen.
if (key in ['G']) and
(EditISOCode.SelStart = 2) then begin Statusbar.SimpleText := 'Mit G können Sie nur die Zahlen 0,1,2 und 3 kombinieren, sonst ungültige Containerbezeichnung!'; end; if not (key in [#8,'0'..'3']) and (EditISOCode.SelStart =3) then begin Key:= #0; end; Vielen Danke für eure Hilfe! Liebe Grüße:) |
AW: Eingabebedingungen
Eigentlich sollte das mit der 3 genauso gehn, wie mit 0 bis 2. :gruebel:
Delphi-Quellcode:
2 oder 3 ... beides geht nicht :zwinker:
(EditISOCode.SelStart = 2)
... (EditISOCode.SelStart = 3) ihr meint bestimmt "wenn an 3. Stelle ein 'G' steht, und die der Cursor auf Position 4 (SelStart 3) liegt, dann darf nur #8, '0', '1', '2' oder '3' eingegeben werden" und nicht "wenn Cursor auf 2 liegt, ein 'G' eingegeben wurde und gleichteitig der Cursor auf 3 steht kein [#8, '0'..'3'] eingegeben wurde, dann..." > Die Position kann nicht gleichzeitig 2 und 3 sein und auch die Taste (Key) kann nicht gleichzeizeitig 'G' und was Anderes sein. PS: Gib mal eine "9" ein, geh mit dem Cursor davor und gib nun "12G" ein. :zwinker: Oder Speichere die 9 in der Zwischenablage (Strg+C) und kopiere sie dann an diese Stelle. Oder schreibe "12G39" und lösche die 3 dort raus. Schon steht "12G9" im Feld. :angel2: Soll heißen ... Ich hoffe ihr prüft dieses nicht nur wärend der Eingabe. |
AW: Eingabebedingungen
Hallo,
danke für die Anwort. So geht das ausnahmsweise, aber das bringt uns nichts. Wir müssen das Programm vorstellen und es muss über die Tastatureingabe funktionieren.. |
AW: Eingabebedingungen
Hatte oben meinen Text noch etwas editiert, bzw. ausführlicher ergänzt.
Wie gedsagt, ihr müßt eure Abfragen anpassen. - das 'G' wurde schon eingegeben und muß demnach im Edit geprüft werden - Key und SelStart beziehen sich nur auf die aktuelle Eingabe, also die Zahlen
Delphi-Quellcode:
//if (Length(EditISOCode.Text) => 3) and (EditISOCode.Text[3] = 'G')
// and (EditISOCode.SelStart = 3) then if (EditISOCode.SelStart = 3) and (EditISOCode.Text[3] = 'G') then begin Statusbar.SimpleText := 'Mit G können Sie nur die Zahlen 0,1,2 und 3 kombinieren, sonst ungültige Containerbezeichnung!'; if not (Key in [#8, '0'..'3']) then Key := #0; end; [edit] ahhh, jetzt seh ich grade das END ... bitte achtet mal mehr auf eure Einrückung ... es ah so aus, als wenn das
Delphi-Quellcode:
innerhalb der vorhergehenden Abfrage liegt.
if not (key in [#8,'0'..'3']) and ...
Hmmm, wenn man das nun nochmal anguckt, dann sollte es eigentlich Funktionieren, so wie du es in Post #1 geschrieben hast. :gruebel: Oder wird die '3' durch eine Andere Abfrage blockiert? (Du hast ja nur einen Teil hier gepostet.)
Delphi-Quellcode:
if (Key in ['G']) and (EditISOCode.SelStart = 2) then
Statusbar.SimpleText := 'Mit G können Sie nur die Zahlen 0,1,2 und 3 kombinieren, sonst ungültige Containerbezeichnung!'; //if (Length(EditISOCode.Text) => 3) and (EditISOCode.Text[3] = 'G') // and (EditISOCode.SelStart = 3) and not (Key in [#8, '0'..'3']) then if (EditISOCode.SelStart = 3) and (EditISOCode.Text[3] = 'G') and not (Key in [#8, '0'..'3']) then Key := #0;
Delphi-Quellcode:
if (Key in ['G']) and (EditISOCode.SelStart = 2) then
Statusbar.SimpleText := 'Mit G können Sie nur die Zahlen 0,1,2 und 3 kombinieren, sonst ungültige Containerbezeichnung!'; //if (Length(EditISOCode.Text) => 3) and (EditISOCode.Text[3] = 'G') // and (EditISOCode.SelStart = 3) then if (EditISOCode.SelStart = 3) and (EditISOCode.Text[3] = 'G') then begin if Key in [#8, '0'..'3'] then begin Statusbar.SimpleText := ''; end else begin Statusbar.SimpleText := 'ungültiges Zeichen'; Key := #0; end; end; |
AW: Eingabebedingungen
Hey danke für deine Hilfe aber es funktioniert immer noch nicht :cry:!! 0,1 und 2 lassen sich eingeben aber immer noch nicht die 3.
Hast du noch eine Idee wie es klappen könnte? Ich häng mal den Quellcode ran, vielleicht ist da ja ein Fehler..
Delphi-Quellcode:
procedure TForm1.EditISOCodeKeyPress(Sender: TObject; var Key: Char);
begin if not(key in [#8,'1'..'4','A'..'H','K'..'N','P']) and (EditISOCode.SelStart =0) then begin Key:= #0; // Ignoriert die Tastatureingabe StatusBar.SimpleText:= 'An der ersten Stelle des ISOCodes kann nur 1, 2, 3, 4, A,B,C,D,E,F,G,H,K,L,M,N oder P stehen.'; end else //2.Zeichen if not (key in [#8, '0','2','5','6','8','C'..'F','L'..'N','P']) and (EditISOCode.SelStart =1) then begin Key:= #0; // Ignoriert die Tastatureingabe StatusBar.SimpleText:= 'An der zweiten Stelle des ISOCodes kann nur 0,2,5,6,8,C,D,E,F,L,M,N oder P stehen.'; end else //3. Zeichen if not (key in [#8,'G','V','R','H','U','T','B','P','S']) and (EditISOCode.SelStart = 2) then begin Key:= #0; Statusbar.SimpleText:= 'An der dritten Stelle des ISOCodes kann nur G,V,R,H,T,B,P,S stehen.' ; end else //4.Zeichen if not (key in [#8,'0'..'9']) and (EditISOCode.SelStart =3) then begin Key:= #0; // Statusbar.SimpleText:='An der vierten Stelle des ISOCodes kann nur 1,2,3,4,5,6,7,8 und 9.'; end; //Bedingung vom 3. zum 4. Zeichen (z.B. G nur mit 0,1,2,3 kombinierbar) if (key in ['G']) and (EditISOCode.SelStart = 2) then begin Statusbar.SimpleText := 'Mit G können Sie nur die Zahlen 0,1,2 und 3 kombinieren, sonst ungültige Containerbezeichnung!'; end; if not (key in [#8,'0'..'3']) and (EditISOCode.SelStart =3) then begin Key:= #0; end; if (key in ['V']) and (EditISOCode.SelStart = 2) then begin Statusbar.SimpleText := 'Mit V können Sie nur die Zahlen 0,2 und 4 kombinieren, sonst ungültige Containerbezeichnung!'; end; if not (key in [#8,'0'..'2','4']) and (EditISOCode.SelStart =3) then begin Key:= #0; end; if (key in ['R']) and (EditISOCode.SelStart = 2) then begin Statusbar.SimpleText := 'Mit R können Sie nur die Zahlen 0,1,2 und 3 kombinieren, sonst ungültige Containerbezeichnung!'; end; if not (key in [#8,'0'..'3']) and (EditISOCode.SelStart =3) then begin Key:= #0; end; if (key in ['H']) and (EditISOCode.SelStart = 2) then begin Statusbar.SimpleText := 'Mit H können Sie nur die Zahlen 0,1,2,3 und 4 kombinieren, sonst ungültige Containerbezeichnung!'; end; if not (key in [#8,'0'..'4']) and (EditISOCode.SelStart =3) then begin Key:= #0; end; if (key in ['U']) and (EditISOCode.SelStart = 2) then begin Statusbar.SimpleText := 'Mit U können Sie nur die Zahlen 0,1,2,3,4 und 5 kombinieren, sonst ungültige Containerbezeichnung!'; end; if not (key in [#8,'0'..'5']) and (EditISOCode.SelStart =3) then begin Key:= #0; end; if (key in ['T']) and (EditISOCode.SelStart = 2) then begin Statusbar.SimpleText := 'Mit T können Sie nur die Zahlen 0,1,2,3,4,5,6,7,8 und 9 kombinieren, sonst ungültige Containerbezeichnung!'; end; if not (key in [#8,'0'..'9']) and (EditISOCode.SelStart =3) then begin Key:= #0; end; if (key in ['B']) and (EditISOCode.SelStart =2) then begin Statusbar.SimpleText := 'Mit B können Sie nur die Zahlen 0,1,3,4,5 und 6 kombinieren, sonst ungültige Containerbezeichnung!'; end; if not (key in [#8,'0'..'6']) and (EditISOCode.SelStart =3) then begin Key:= #0; end; if (key in ['P']) and (EditISOCode.SelStart =2) then begin Statusbar.SimpleText := 'Mit P können Sie nur die Zahlen 0,1,2,3,4 und 5 kombinieren, sonst ungültige Containerbezeichnung!'; end; if not (key in [#8,'0'..'5']) and (EditISOCode.SelStart =3) then begin Key:= #0; end; if (key in ['S']) and (EditISOCode.SelStart = 2) then begin Statusbar.SimpleText := 'Mit S können Sie nur die Zahlen 0,1 und 2 kombinieren, sonst ungültige Containerbezeichnung!'; end; if not (key in [#8,'0'..'2']) and (EditISOCode.SelStart =3) then begin Key:= #0; end; |
AW: Eingabebedingungen
Delphi-Quellcode:
die Ganzen
procedure TForm1.EditISOCodeKeyPress(Sender: TObject; var Key: Char);
begin if not (Key in [#8, '1'..'4', 'A'..'H', 'K'..'N', 'P']) and (EditISOCode.SelStart = 0) then begin Key := #0; // Ignoriert die Tastatureingabe StatusBar.SimpleText := 'An der ersten Stelle des ISOCodes kann nur 1, 2, 3, 4, A,B,C,D,E,F,G,H,K,L,M,N oder P stehen.'; end else // 2. Zeichen if not (Key in [#8, '0', '2', '5', '6', '8', 'C'..'F', 'L'..'N', 'P']) and (EditISOCode.SelStart = 1) then begin Key := #0; // Ignoriert die Tastatureingabe StatusBar.SimpleText := 'An der zweiten Stelle des ISOCodes kann nur 0,2,5,6,8,C,D,E,F,L,M,N oder P stehen.'; end else // 3. Zeichen if not (Key in [#8, 'G', 'V', 'R', 'H', 'U', 'T', 'B', 'P', 'S']) and (EditISOCode.SelStart = 2) then begin Key := #0; StatusBar.SimpleText := 'An der dritten Stelle des ISOCodes kann nur G,V,R,H,T,B,P,S stehen.'; end else // 4.Zeichen if not (Key in [#8, '0'..'9']) and (EditISOCode.SelStart = 3) then begin Key := #0; // Statusbar.SimpleText:='An der vierten Stelle des ISOCodes kann nur 1,2,3,4,5,6,7,8 und 9.'; end; // Bedingung vom 3. zum 4. Zeichen (z.B. G nur mit 0,1,2,3 kombinierbar) if (Key in ['G']) and (EditISOCode.SelStart = 2) then begin StatusBar.SimpleText := 'Mit G können Sie nur die Zahlen 0,1,2 und 3 kombinieren, sonst ungültige Containerbezeichnung!'; end; if not (Key in [#8, '0'..'3']) and (EditISOCode.SelStart = 3) then begin Key := #0; end; if (Key in ['V']) and (EditISOCode.SelStart = 2) then begin StatusBar.SimpleText := 'Mit V können Sie nur die Zahlen 0,2 und 4 kombinieren, sonst ungültige Containerbezeichnung!'; end; if not (Key in [#8, '0'..'2', '4']) and (EditISOCode.SelStart = 3) then begin Key := #0; end; if (Key in ['R']) and (EditISOCode.SelStart = 2) then begin StatusBar.SimpleText := 'Mit R können Sie nur die Zahlen 0,1,2 und 3 kombinieren, sonst ungültige Containerbezeichnung!'; end; if not (Key in [#8, '0'..'3']) and (EditISOCode.SelStart = 3) then begin Key := #0; end; if (Key in ['H']) and (EditISOCode.SelStart = 2) then begin StatusBar.SimpleText := 'Mit H können Sie nur die Zahlen 0,1,2,3 und 4 kombinieren, sonst ungültige Containerbezeichnung!'; end; if not (Key in [#8, '0'..'4']) and (EditISOCode.SelStart = 3) then begin Key := #0; end; if (Key in ['U']) and (EditISOCode.SelStart = 2) then begin StatusBar.SimpleText := 'Mit U können Sie nur die Zahlen 0,1,2,3,4 und 5 kombinieren, sonst ungültige Containerbezeichnung!'; end; if not (Key in [#8, '0'..'5']) and (EditISOCode.SelStart = 3) then begin Key := #0; end; if (Key in ['T']) and (EditISOCode.SelStart = 2) then begin StatusBar.SimpleText := 'Mit T können Sie nur die Zahlen 0,1,2,3,4,5,6,7,8 und 9 kombinieren, sonst ungültige Containerbezeichnung!'; end; if not (Key in [#8, '0'..'9']) and (EditISOCode.SelStart = 3) then begin Key := #0; end; if (Key in ['B']) and (EditISOCode.SelStart = 2) then begin StatusBar.SimpleText := 'Mit B können Sie nur die Zahlen 0,1,3,4,5 und 6 kombinieren, sonst ungültige Containerbezeichnung!'; end; if not (Key in [#8, '0'..'6']) and (EditISOCode.SelStart = 3) then begin Key := #0; end; if (Key in ['P']) and (EditISOCode.SelStart = 2) then begin StatusBar.SimpleText := 'Mit P können Sie nur die Zahlen 0,1,2,3,4 und 5 kombinieren, sonst ungültige Containerbezeichnung!'; end; if not (Key in [#8, '0'..'5']) and (EditISOCode.SelStart = 3) then begin Key := #0; end; if (Key in ['S']) and (EditISOCode.SelStart = 2) then begin StatusBar.SimpleText := 'Mit S können Sie nur die Zahlen 0,1 und 2 kombinieren, sonst ungültige Containerbezeichnung!'; end; if not (Key in [#8, '0'..'2']) and (EditISOCode.SelStart = 3) then begin Key := #0; end;
Delphi-Quellcode:
hängen zusammen ... das ergibt in Kurz:
if not (Key in [...]) and (EditISOCode.SelStart = ...)
Delphi-Quellcode:
Was fällt nun auf?
if (not (Key in [#8, '0'..'3']) and (EditISOCode.SelStart = 3))
or (not (Key in [#8, '0'..'2', '4']) and (EditISOCode.SelStart = 3)) or (not (Key in [#8, '0'..'3']) and (EditISOCode.SelStart = 3)) or (not (Key in [#8, '0'..'4']) and (EditISOCode.SelStart = 3)) or (not (Key in [#8, '0'..'5']) and (EditISOCode.SelStart = 3)) or (not (Key in [#8, '0'..'9']) and (EditISOCode.SelStart = 3)) or (not (Key in [#8, '0'..'6']) and (EditISOCode.SelStart = 3)) or (not (Key in [#8, '0'..'5']) and (EditISOCode.SelStart = 3)) or (not (Key in [#8, '0'..'2']) and (EditISOCode.SelStart = 3)) then begin Key := #0; end; Egal welcher Buchstabe auf 2 liegt, es wird immer nur [#8, '0'..'2'] zugelassen. Debugge doch einfach mal deinen Code? - starte dein Programm gibt "23G" ein - lege einen Haltepunkt (F5) auf den ersten Befehl dieser Methode/Prozedur - drück auf die "3" - und nun geh einfach mal mit F7 durch diese Methode durch ... und schon wirst du sehn wann/wo und warum Key aud #0 gesetzt wird. Und schau dir mal jeweils das 2. IF im Post #4 an, dort wird auch nochmal der Buchstabe geprüft. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz