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 mit

    int 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


Anmelden zum Antworten