Höhe des Listenfeldes dynamisch (!) bei einer ComboBox



  • Na hallo zusammen,

    ich habe mal wieder ein kleines Problem und hoffe, mir kann diesmal jemand helfen 🙂

    Und zwar möchte ich bei einer ComboBox den Inhalt des Listenfeldes dynamisch an die Eingabe im Editfeld anpassen, sprich je nachdem, was man im Editfeld eingibt, soll nur noch das in der Liste stehen, was damit beginnt.
    Das entsprechende auswählen funktioniert auch soweit, nur habe ich ein Problem mit der Höhe der Liste, z.B.:
    Sobald man mal etwas eingibt, was nur noch einen Eintrag in der Liste entspricht und danach wieder etwas wegnimmt und demzufolge wieder mehrere Einträge in die Liste eingetragen werden, bleibt er aber bei der Höhe der Liste für den einen Eintrag, d.h. es existiert nur noch eine Zeile mit Scrollbalken, was nicht sehr praktisch ist 😞

    Klar, ich kann mit ShowDropDown() beheben, indem ich in der OnCbnEditChange die Liste erstmal ausblende, die Einträge ändere und dann wieder einblende, nur ruiniert das aber total die Performance.

    Daher meine Frage: Gibt es eine Möglichkeit die Höhe der Liste außerhalb des Dialog-Editors noch zu ändern??? Ich möchte einfach die Höhe bis zu einer bestimmten Anzahl auf alle Einträge erweitern.
    Für die Breite gibt's ja etwas, nur für die Höhe hab ich irgendwie nichts gefunden...

    Vielen Dank schon mal!!


  • Mod

    Mach es selbst. Besorge Dir ein Handle auf die Liste und vergrößere Sie wie Du es brauchst. Mit GetComboBoxInfo besorgst Du Dir das ListBox handle.



  • Danke für den Tip.
    Nur leider klappt das bei mir nichts so richtig.
    Das GetComboBoxInfo ist ja nur für WinXP verfügbar 😞
    Daher müßte man ja erst irgendetwas mit "Manifest" einbinden (weiß leider überhaupt nicht, wie das geht), um es zu nutzen, zumindest soweit ich weiß. Wäre für eine Hilfe sehr dankbar 🙂

    Ich denke zumindest, daß man da noch was machen muß:
    laut "afxwin.h":

    #if(WINVER >= 0x0500)
    	BOOL GetComboBoxInfo(PCOMBOBOXINFO pcbi) const;
    #endif	// WINVER >= 0x0500
    

    Da ich ja WinXP nutze ist die WINVER bei mir 0x0501.
    Theoretisch sollte ich diese Funktion also Nutzen können, er kennt sie aber nicht (kein Element von CComboBox).

    Für Vorschläge bin ich sehr dankbar! 🙂



  • Mal ne klene vermutung, wenn man die größe der ComboBox angiebt dann bedeutet das doch das die Größe inklusive ListBox ist. SPrich wenn du die Größe mit SetWIndowPos angibst dann änderst du doch rein theo die Größe der ListBix mot. Das einziege was du tun must ist die größe des Editfeld berechnen. Und das dann abziehen. Hoffe hab jetzt hier nix falsches gesagt.



  • Na hi,
    klappt leider nicht so, wäre ja auch zu schön, wenn es so einfach wäre 😋

    Ich kann zwar die Größe/Position der gesamten ComboBox damit ändern, nur wird die Größe der ListBox nicht an die Angaben angepasst.
    Trotzdem danke für den Versuch.


  • Mod

    raindrop schrieb:

    Danke für den Tip.
    Nur leider klappt das bei mir nichts so richtig.
    Das GetComboBoxInfo ist ja nur für WinXP verfügbar

    Die MSDN sagt klar anderes:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/comboboxes/comboboxreference/comboboxfunctions/getcomboboxinfo.asp



  • Schon merkwürdig.
    In den Remarks steht: "
    The CB_GETCOMBOBOXINFO message is equivalent to this function."
    Und dort steht bei minimum Operation Systems: Windows XP!

    Naja, hab es nochmal versucht. Aber er kennt bei mir weder die COMBOBOXINFO noch die GetComboBoxInfo-Funktion. Das merkwürdige daran ist, Visual Studio scheint beides schon zu kennen (zumindest wenn man nach den Syntax-Vorschlägen geht, aber der Compiler kennt das beide nicht!
    Habe es auch schon versucht, die in der MSDN angegebenen Header einzubinden; selbes Resultat 😞

    Was muß ich evtl. noch bereitstellen???


  • Mod

    Die Nachricht ist tatsächlich nur in XP verfügabr. Die Funktion ab Win98 und NT4 SP6. Evtl. handelt es sich hier um einen falsche Deklaration in den Windows Headern.



  • Das wäre natürlich ungünstig.
    Aber da ich WinXP verwende, sollte es doch eigentlich keine Probleme geben, oder??
    Falls Du noch eine Idee hast, wie ich das zum laufen bekomme, immer her damit 😉


Anmelden zum Antworten