Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Neuen Beitrag zur Code-Library hinzufügen (https://www.delphipraxis.net/33-neuen-beitrag-zur-code-library-hinzufuegen/)
-   -   Delphi History für Combobox (https://www.delphipraxis.net/146214-history-fuer-combobox.html)

shmia 15. Jan 2010 18:00


History für Combobox
 
Folgende beide Prozeduren erweitern Comboboxen um eine Historyfunktionalität.
Der Vorteil ist, dass man dazu keine neuen Komponenten installieren muss.
Man muss dazu nur eine der beiden Prozeduren aufrufen, wann immer ein eingegebener Wert in die Drop-Down-Liste aufgenommen werden soll.

Das Property Style darf nicht auf csDropDownList stehen, da man sonst keine neuen Werte eingeben kann.
Interessant ist auch, wenn man das Property Style auf csSimple setzt.
Dann sieht die Combobox wie ein normales Editfeld aus und man kann mit Pfeil auf/ab durch die letzten Eingaben blättern.

Es gibt zwei Varianten:
1.) die Historyeinträge werden sortiert. Sobald die max. erlaubt Anzahl erreicht ist, werden keine neuen Einträge zur Liste hinzugefügt
2.) die Historyeinträge werden in der Reihenfolge des Einfügens geführt. Sollte ein neuer Eintrag schon in der Liste sein, wandert dieser auf der 1. Platz

Delphi-Quellcode:
procedure ComboboxSortedHistory(cbo:TCustomComboBox; maxitems:Integer=20);
var
   s : string;
   i : Integer;
begin
   if cbo.Items.Count >= maxitems then Exit;

   s := TComboBox(cbo).Text;
   if (s<>'') and (cbo.Items.IndexOf(s) = -1) then
   begin
      for i := 0 to cbo.Items.Count-1 do
      begin
         if s < cbo.Items[i] then
         begin
            cbo.Items.Insert(i, s);
            Exit;
         end;
      end;
      cbo.Items.Add(s);
   end;
end;


procedure ComboboxRollingHistory(cbo:TCustomComboBox; maxitems:Integer=20);
var
   s : string;
   i : Integer;
begin
   s := TComboBox(cbo).Text;
   if s='' then Exit;

   i := cbo.Items.IndexOf(s);
   if i >= 0 then
   begin
      cbo.Items.Move(i, 0);
      cbo.ItemIndex := 0;
   end
   else
   begin
      cbo.Items.Insert(0, s);
      if maxitems >= 0 then
         while cbo.Items.Count > maxitems do
            cbo.Items.Delete(cbo.Items.Count-1);
   end;
end;


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