TComboBox

Grundlegendes
Der Inhalt einer ComboBox ist
ein mehrzelliger String, wobei die erste Zeile mit 0 beginnt. Um
eine ComboBox mit Einträgen (Items) zu füllen, die später als
Auswahl zur Verfügung stehen sollen, geht man im Objektinspektor
zu Items und klickt in das dahinterliegende Feld [TStrings],
dann auf den erscheinenden Button [...] Vom Programm aus füllt
man die Liste mit einem TString oder füllt und löscht mit:

Auswahl setzen und abfragen
| |
ComboBox1.ItemIndex := 0;
//
setzt die Auswahl auf den ersten Eintrag |
| |
if ComboBox1.ItemIndex =
0
then
// mach irgendwas |

Text des aktuellen Eintrages übernehmen (
var S:
String; )
| |
S := ComboBox1.Text;
// Übernimmt den aktuell
eingestellten Item-Text
in Variable S |

Eintrag (Item) hinzufügen und entfernen
| |
ComboBox1.Items.Add('neuer
Eintrag');
// fügt einen Eintrag hinzu
ComboBox1.Items.Delete(0);
// löscht den ersten Eintag |

Kompletter Inhalt in eine TStringlist kopieren
und wieder zurück
| |
var
SList: TStringList;
SList := TStringList.Create;
//SList.Assign (ComboBox1.Items);
// Inhalt wird gespiegelt, vorhandener Inhalt geht verloren
//SList.AddStrings(self.ComboBox1.Items)
// Inhalt aus ComboBox wird hinzukopiert, vorhandener Inhalt
bleibt erhalten
// und wieder zurück
ComboBox1.Items
:= SList;
// Inhalt wird gespiegelt, vorhandener Inhalt geht verloren
SList.Free; |

Schreibschutz (nur Auswahl per Drop-Down,
keine Benutzereingabe per Tastatur möglich)
Im
Objektinspektor die Option Style auf
„csDropDownList“

Die letzten Einträge in umgekehrter Reihenfolge
merken
Nutzt man eine
ComboBox als Eingabefeld und möchte man die letzten Einträge als
Legende in die Auswahl schreiben, so kann man den hier gezeigten
Code verwenden, der auch gleich die Reihenfolge so zurechtbiegt,
so dass die zuletzt getätigte Eingabe immer ganz oben steht. Es
werden nur Eingaben mit aufgenommen, welche nicht bereits in der Liste
stehen. Nach acht Einträgen wird der jeweils letzte
(chronologisch) aus der Liste entfernt.
| |
procedure
ComboBoxLegende(ComboBox: TComboBox; MaxAnzahl);
var
i: Integer;
begin
if
ComboBox.Items.IndexOf(ComboBox.Text) = -1
then
begin
ComboBox.Items.Add('');
for i :=
ComboBox.Items.Count -1
downto
0 do
begin
ComboBox.Items[i] := ComboBox.Items[i -1];
end;
ComboBox.Items[0] :=
ComboBox.Text;
if
ComboBox.Items.Count > MaxAnzahl then
ComboBox.Items.Delete(MaxAnzahl);
end;
end; |
Aufruf: (muss nach jeder
Eingabe aufgerufen werden!)
| |
ComboBoxLegende(ComboBox1,
8);
// die letzten 8 Einträge werden gemerkt |
Das Ganze noch in die Registry
schreiben
Benötigt ReWriteXxx, siehe
hier. (Var
i: Integer)
| |
RegWriteStr('MeinProgramm',
'ComboBox1', ComboBox1.Text);
RegWriteInt('MeinProgramm',
'ComboBox1Count',
ComboBox1.Items.Count);
for i :=
1 to
ComboBox1.Items.Count do
begin
RegWriteStr('MeinProgramm',
'ComboBox1' +IntToStr(i
-1), ComboBox1.Items[i
-1]);
end; |
Und beim Programm-Neustart
wieder einlesen
Benötigt ReReadXxx, siehe
hier. (Var
i,n: Integer)
| |
ComboBox1.Text := RegReadStr('MeinProgramm',
'ComboBox1',
'');
n := RegReadInt('MeinProgramm','ComboBox1Count',
0);
for i :=
1 to
n do
begin
ComboBox1.Items.Add(RegReadStr('MeinProgramm',
'ComboBox1' +IntToStr(i
-1), ''));
end; |

|