Es gibt ja mehrere Varianten zum Füllen:
* direkt beim Erstellen/Laden der Form und dann unverändert
* irgendwann, aber nie während, bzw. kurz bevor aufgepoppt wird
* im OnClick, bzw. OnDropDown
* während schon offen ist
Erstmal zur
VCL:
* TComboBox kein Problem
* TComboBoxEx geht garnicht, sobald ich einmal Items.Clear hatte (im Debugger kommt sogar eine
Exception)
* erstaunlich, gab es kein Clear und es gab noch nie Items (leer erstellt), dann geht bei Beiden das Dropdown mit einer Leerzeile auf
* im FMX geht das DropDown nicht auf, wenn es nichts gibt (hätte ich von Windows auch fast erwartet)
Delphi-Quellcode:
// ComboBox1.OnDropDown + ComboBoxEx1.OnDropDown
procedure TForm5.ComboBox1DropDown(Sender: TObject);
ComboBox1.Items.Clear;
ComboBoxEx1.Items.Clear;
Timer1.Tag := 10;
Timer1.Enabled := True;
//Timer1Timer(nil); // egal ob sofort auf, also erstmal ohne einen Eintrag, oder ob nicht leer ... kein Unterschied
end;
// Timer1.OnTimer mit Timer1.Enabled=False
procedure TForm5.Timer1Timer(Sender: TObject);
begin
//ComboBox1.Items.Add(Timer1.Tag.ToString);
//ComboBoxEx1.Items.Add(Timer1.Tag.ToString);
SendTextMessage(ComboBox1.Handle, CB_ADDSTRING, 0, Timer1.Tag.ToString);
SendTextMessage(ComboBoxEx1.Handle, CB_ADDSTRING, 0, Timer1.Tag.ToString);
Timer1.Tag := Timer1.Tag - 1;
if Timer1.Tag = 0 then
Timer1.Enabled := False;
end;
// ComboBox1.OnCloseUp + ComboBoxEx1.OnSelect
procedure TForm5.ComboBox1CloseUp(Sender: TObject);
begin
Timer1.Enabled := False;
ComboBox1.Items.Clear;
ComboBoxEx1.Items.Clear;
end;
Beim FMX mit TComboBox oder TComboEdit
* beim TComboEdit funktioniert auch garnichts
* die TComboBox geht nur auf, wenn vor OnPopup Einträge vorhanden waren
* * und es ist, kranker Weise, auch garnicht möglich im OnDropDown die Items zu ändern > es werden die alten Items angezeigt
Fazit:
* vorher
DummyItems drin
* bei FMX immer vorher füllen, da das OnDropDown absolut nutzloser Schrott ist