Kann es sein, dass die Eigenschaft SelText der ComboBox ein wenig buggy implementiert ist? SelText gibt ja den aktuell selektierten Text zurück. Bei Edits und MemoBoxen funktioniert das wunderbar, auch wenn die Komponente gerade nicht den Fokus besitzt. Schließlich ist diese Selektierung ja eigentlich unabhängig von der aktuell tatsächlich sichtbaren Markierung (durchs Fokussieren). Bei der ComboBox scheint dies nicht so zu sein. Sobald die Komponente nicht mehr den Fokus besitzt, scheint sie ihre Selektierung zu vergessen und somit liefert SelText immer den Leerstring und SelStart immer 0. Wenn ich versuche zu tricksen und der ComboBox einfach vor der Abfrage kurz den Fokus "zurück gebe", dann wird automatisch der gesammte Text markiert.
Gibt es eine Möglichkeit dieses Verhalten der ComboBox irgendwie zu umgehen?
Was ich machen will:
Mein Programm soll eine interne "Character Map" besitzen, mit der man Zeichen, die man nicht auf der Tastatur hat und die man sonst über umständliche Tastencodes eingeben müsste, per Knopfdruck in eine beliebige Eingabe-Komponente des Hauptforms einfügen kann. Die Character Map wird als Unterformular geöffnet, so dass keine Möglichkeit besteht, der ComboBox nicht ihren Fokus "weg zu nehmen". Die OnClick-Methode der Buttons der Character Map sieht so aus:
Delphi-Quellcode:
procedure TFormCharmap.HandleCharButtonClick(Sender: TObject);
var
Key: integer;
begin
Key:=(Sender as TButton).Tag;
if (FormMain.ActiveControl is TCustomEdit) then
begin
(FormMain.ActiveControl as TCustomEdit).SelText:=Chr(Key);
end;
if (FormMain.ActiveControl is TCustomComboBox) then
begin
(FormMain.ActiveControl as TCustomComboBox).SelText:=Chr(Key);
end;
end;
Mit den CustomEdits funktioniert es, mit den CustomComboBoxes nicht. Weil die stets den SelText vergessen, wird der Text immer am Anfang eingefügt, was nicht wirklich Sinn der Sache ist.
Kennt jemand eine Möglichkeit, wie ich mein Vorhaben dennoch in die Tat umsetzen kann?