AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Eingabebedingungen

Ein Thema von CIADelphianer · begonnen am 26. Aug 2010 · letzter Beitrag vom 26. Aug 2010
Antwort Antwort
CIADelphianer

Registriert seit: 20. Aug 2010
10 Beiträge
 
#1

Eingabebedingungen

  Alt 26. Aug 2010, 11:12
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:
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;
Dieser Quellcode bezieht sich jetzt nur auf das 3. und 4.Zeichen.
Vielen Danke für eure Hilfe!
Liebe Grüße
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.062 Beiträge
 
Delphi 12 Athens
 
#2

AW: Eingabebedingungen

  Alt 26. Aug 2010, 11:29
Eigentlich sollte das mit der 3 genauso gehn, wie mit 0 bis 2.

Delphi-Quellcode:
(EditISOCode.SelStart = 2)
...
(EditISOCode.SelStart = 3)
2 oder 3 ... beides geht nicht

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.
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.

Soll heißen ... Ich hoffe ihr prüft dieses nicht nur wärend der Eingabe.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (26. Aug 2010 um 11:38 Uhr)
  Mit Zitat antworten Zitat
CIADelphianer

Registriert seit: 20. Aug 2010
10 Beiträge
 
#3

AW: Eingabebedingungen

  Alt 26. Aug 2010, 11:35
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..

Geändert von CIADelphianer (26. Aug 2010 um 11:54 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.062 Beiträge
 
Delphi 12 Athens
 
#4

AW: Eingabebedingungen

  Alt 26. Aug 2010, 11:46
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 if not (key in [#8,'0'..'3']) and ... innerhalb der vorhergehenden Abfrage liegt.

Hmmm, wenn man das nun nochmal anguckt, dann sollte es eigentlich Funktionieren, so wie du es in Post #1 geschrieben hast.

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;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (26. Aug 2010 um 11:52 Uhr)
  Mit Zitat antworten Zitat
CIADelphianer

Registriert seit: 20. Aug 2010
10 Beiträge
 
#5

AW: Eingabebedingungen

  Alt 26. Aug 2010, 12:28
Hey danke für deine Hilfe aber es funktioniert immer noch nicht !! 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;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.062 Beiträge
 
Delphi 12 Athens
 
#6

AW: Eingabebedingungen

  Alt 26. Aug 2010, 12:54
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;
die Ganzen if not (Key in [...]) and (EditISOCode.SelStart = ...) hängen zusammen ... das ergibt in Kurz:
Delphi-Quellcode:
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;
Was fällt nun auf?
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (26. Aug 2010 um 13:00 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz