Thema: Delphi History für Combobox

Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#1

History für Combobox

  Alt 15. Jan 2010, 18:00
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;
Andreas
  Mit Zitat antworten Zitat