Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi StringGrid: Eingabe in Zelle prüfen (https://www.delphipraxis.net/128212-stringgrid-eingabe-zelle-pruefen.html)

Helmi 26. Jan 2009 13:17


StringGrid: Eingabe in Zelle prüfen
 
Hallo,

ich hab grad ein Problem an dem ich (fast) verzweifle (etwas dramatisch aber das steigert die Erwartungen :-) )

Ich möchte die Eingabe in einer Zelle prüfen und zwar nach folgenden Kriterien:
  • maximal 3 Zeichen
  • an erster Stelle darf nur ein "S" oder eine "0" stehen
  • wenn an erster Stelle eine "0" steht, darf keine weitere Eingabe möglich sein
  • wenn an erster Stelle ein "S" steht, dann dürfen danach nur noch Ziffern kommen

Die maximale Eingabe von 3 Zeichen hab ich schon gelöst:
Delphi-Quellcode:
procedure TEinstellungenForm.StringGrid_ZugzieleKeyPress(Sender: TObject;
  var Key: Char);
var
  Zeile: Integer;
  Spalte: Integer;
  Text: String;

begin
  //Zeile und Spalte auslesen
  Zeile  := StringGrid_Zugziele.Row;
  Spalte := StringGrid_Zugziele.Col;
  Text   := StringGrid_Zugziele.Cells[Spalte, Zeile];

  //Tastenprüfung abhängig der ausgewählten Spalte
  If Spalte = 0 then
    begin
      //prüfen ob die gedrückte Taste in der Liste der erlaubten Taste ist
      If not (Key in ['S', '0'..'9', #8]) then
        Key := #0;

      //Die Länge der Eingabe begrenzen (Rücktaste aber zulassen)
      If not (Key = #8) then
        If length(Text) >= 3 then
          Key := #0;
    end;
end;
Aber wie kann ich den Rest bewerkstelligen?

Bomberbb 26. Jan 2009 13:34

Re: StringGrid: Eingabe in Zelle prüfen
 
Meinst Du das in etwa so...?
Delphi-Quellcode:
case length(Text) of
  0: If not (Key in ['S', '0', #8]) then
        Key := #0;
  1,2:If Text[1]='0' then
        Key := #0
      else If (Text[1]='S') and not (Key in ['0'..'9', #8]) then
else
  Key := #0;
end;

Helmi 26. Jan 2009 13:47

Re: StringGrid: Eingabe in Zelle prüfen
 
Ja, genau so.

Dein Code hatte noch ein paar Macken - habs jetzt so gelöst:
Delphi-Quellcode:
      If not (Key in [#8]) then
        begin
          case length(Text) of
            0:   begin
                    If not (Key in ['S', '0']) then
                      Key := #0;
                  end;
            1, 2: begin
                    If Text[1] = '0' then
                      Key := #0
                    else
                      If (Text[1] = 'S') and not (Key in ['0'..'9']) then
                        Key := #0;
                  end;
          else
            Key := #0;
          end;
        end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:53 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