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/)
-   -   ComboBox Eingabe nur valider Zeichen (https://www.delphipraxis.net/158272-combobox-eingabe-nur-valider-zeichen.html)

ibp 11. Feb 2011 09:03

ComboBox Eingabe nur valider Zeichen
 
Hi,

stehe gerade ein wenig auf dem Schlauch. Mit der Einstellung Style= csDropDown und AutoComplete=True erreiche ich fast das was ich will.
Nur: Kann man auch Eingaben machen, die nicht in der Liste vorhanden sind. Wie kann ich verhindern, dass Zeichen eingegeben werden die nicht in den Items vorhanden ist.

Danke schon mal...

WM_CLOSE 11. Feb 2011 09:15

AW: ComboBox Eingabe nur valider Zeichen
 
Selbst im
Delphi-Quellcode:
OnKeyPress
prüfen, ob der eingegebene String in der Liste ist.

Delphi-Quellcode:
if (sender as TComboBox).Items.IndexOf((Sender as TCombobox).text)+Key=-1 then
begin
  Key:=0;
end;

ibp 11. Feb 2011 11:54

AW: ComboBox Eingabe nur valider Zeichen
 
Habe nun eine Lösung gefunden....

performantere Vorschläge werden gerne entgegengenommen!

Delphi-Quellcode:
procedure TForm1.CheckBoxKeyPress(Sender: TObject; var Key: Char);
var
 idx      : integer;
 actPos   : integer;
 ItemText : String;
 InputText : String;
begin
  if Ord(Key)>31 then
  begin
    actPos:= (Sender as TCombobox).SelStart + 1;

    if actPos>0 then
    begin
      InputText:=Copy((Sender as TCombobox).Text,1,actPos-1) + Key ;

      for idx:=0 to (Sender as TCombobox).Items.Count-1 do
      begin
        ItemText:=copy((Sender as TCombobox).Items.Strings[idx],1,actPos);
        if CompareText(ItemText,InputText)=0 then
        begin
          Exit;
        end;
      end;
      Key:=#0;
    end;
  end;
end;

danke an M_CLOSE, das war leider nicht die Lösung, da hier auch alle Steuerzeichen etc. blockiert werden und IndexOf den gesamten String vergleicht!

Zitat:

Zitat von WM_CLOSE (Beitrag 1081011)
Selbst im
Delphi-Quellcode:
OnKeyPress
prüfen, ob der eingegebene String in der Liste ist.
Delphi-Quellcode:
if (sender as TComboBox).Items.IndexOf((Sender as TCombobox).text)+Key=-1 then
begin
  Key:=0;
end;



Alle Zeitangaben in WEZ +1. Es ist jetzt 20:39 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-2025 by Thomas Breitkreuz