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;