Lange Einträge in einer TComboBox
-
Hallo
ich habe ziemlich lange Einträge in einer Combobox. Diese sind länger wie die Box breit. Kann ich den jeweils markierten Eintrag als Hint anzeigen, so dass der Benutzer vor dem effektiven Auswählen den kompletten Eintrag sehen kann. Oder gibt es sonst eine Idee wie ich die langen Einträge sichtbar machen kann ohne die Box zu vergrössern
Vielen Dank
-
Hallo,
Klar kannst du den Eintrag als Hint anzeigen.
Du musst nur eine Funktion für Application->OnShowHint bereitstellen in der du nachschaust ob die Anforderung von deiner Combobox kommt und dann zeigste du den kompletten Text als Hint an.
Z. Bsp. so:void __fastcall TForm1::DisplayHint(AnsiString& HintStr, bool& CanShow, THintInfo& HintInfo) { TComboBox* box= dynamic_cast<TComboBox*>(HintInfo.HintControl); // Sender holen CanShow = false; // Testen obs auch eine ComboBox ist if( box) { // Text anzeigen HintStr = box->Text; CanShow = true; // } }
Du musst nur noch die Funktion entsprechend zuweisen, z. Bsp. im Konstruktor deiner Form
Application->OnShowHint = DisplayHint;
-
Braunstein schrieb:
Hallo,
Klar kannst du den Eintrag als Hint anzeigen.
Du musst nur eine Funktion für Application->OnShowHint bereitstellen in der du nachschaust ob die Anforderung von deiner Combobox kommt und dann zeigste du den kompletten Text als Hint an.Vielen Dank für den Input. Leider ist es nicht ganz das was ich möchte. Ich versuche es nochmals zu beschreiben.
Ich habe eine Combobox mit folgenden Einträge:
"Langer Text 1"
"Langer Text 2"
"Langer Text 3"Wenn ich nun die Combobox aufklappe habe ich etwas wie folgt:
+------------+ |Langer Te[V]| +------------+ |Langer Tex| |Langer Tex| |Langer Tex| +----------+
Wenn ich nun mit der Maus über die Einträge fahre, möchte ich irgendwo die kompletten Text - beispielsweise als Hint - sehen.
-
Die ComboBox hat kein Ereignis, mit dem man feststellt, dass die DropDownListe aufgeklappt ist und die Items selektiert/ausgewählt werden.
Die einzige brauchbare Message ist WM_CTLCOLORLISTBOX. Mit Subclassing der ComboBox kannst du diese Nachricht abfangen. Dann fragst du nur mitint inx = SendMessage(Form1->ComboBox1->Handle, CB_GETCURSEL, 0, 0);
den selektierten Eintrag ab und schon hast du den Text.
Nur lässt sich dieser im Hint der ComboBox nicht darstellen.
Da wäre ein TBalloonHint geeigneter.mfg