Listview Control - Bei Doppelklick auf Eintrag etwas tun



  • Hallo

    Ich habe ein Listview Control (im Report Style) und möchte wenn der User auf ein Item klickt, etwas ausführen. Leider hab ich keine Ahnung wie so etwas funktionieren soll, muss ich das Steuerelement Subclassen und dann irgendeine Nachricht abfangen oder ist eine solche Funktion eingebaut?

    Und wo wir gleich dabei sind, wie ließe es sich einrichten, dass beim klick auf eine der Spalten die Liste nach dieser Spalte sortiert wird (wie beim Explorer beispielsweise)?

    Hoffe ihr könnt mir bei beiden Fragen behilflich sein 🙂



  • Maniac schrieb:

    Ich habe ein Listview Control (im Report Style) und möchte wenn der User auf ein Item klickt, etwas ausführen. Leider hab ich keine Ahnung wie so etwas funktionieren soll, muss ich das Steuerelement Subclassen und dann irgendeine Nachricht abfangen oder ist eine solche Funktion eingebaut?

    Da mußt Du nichts subclassen. Du bekommst vom Control eine Benachrichtigung: LVN_ITEMACTIVATE

    Maniac schrieb:

    Und wo wir gleich dabei sind, wie ließe es sich einrichten, dass beim klick auf eine der Spalten die Liste nach dieser Spalte sortiert wird (wie beim Explorer beispielsweise)?

    Das lässt sich auch einrichten. Wenn auf die Header geklickt wird, bekommst Du LVN_COLUMNCLICK gesendet. Jetzt kannst Du deinerseits LVM_SORTITEMS oder LVM_SORTITEMSEX an das Control senden oder die Macros ListView_SortItems/ ListView_SortItemsEx verwenden.



  • Ausgezeichnet, danke schonmal (hab mich jetzt registriert).
    Also das mit dem Sort ist schonmal klar, aber das mit dem Doppelklick noch nicht ganz, wann wird die LVN_ITEMACTIVATE Nachricht denn geschickt? Und kann man damit checken, ob auf ein Item doppelklickt wurde?



  • Du könntest auch zum prüfen eines Doppelklicks die WM_NOTIFY abfangen und prüfen ob die notification message NM_DBLCLK gesendet wurde...



  • Phillemann schrieb:

    , ob auf ein Item doppelklickt wurde?

    Das ist eine Einstellungsfrage. Wenn Du LVS_EX_ONECLICKACTIVATE gesetzt hast nicht, ansonsten ja.



  • Ok, momentan funktioniert wirklick alles klasse, sortiert wird schön, Doppelklick funzt auch supi.
    Jetzt noch 2 Sachen, eigentlich eine:
    Wie kann ich etaws in 2 Richtungen sortieren lassen? Also wenns erst absteigend sortiert wurde, dann beim nächsten mal aufsteigend? Muss ich da die entsprechende Variable(n) erstellen?
    Und wie kriege ich den dazu passenden Pfeil neben die Spalte.



  • Ja, das mußt Du Dir selber merken. Die Bilders bekommst Du dahin, indem Du Dir zuerst per ListView_GetHeader ein Handle auf das Header-Control besorgst (in LVN_COLUMNCLICK). Nun kannst Du die einzelnen Header-Items mit Header_SetItem modifizieren und die Images setzen/ löschen. Dabei solltest Du unter den neueren Versionen aber die eingebauten Bitmaps verwenden.

    Die Version findest Du schnell heraus, indem Du CCM_GETVERSION an das Control sendest. Wenn da >= 6 zurückkommt, kannst Du die eingebauten Bitmaps verwenden. Zusätzlich solltest Du dann auch ListView_SetSelectedColumn verwenden.



  • Geil, ich bedanke mich 🙂


Anmelden zum Antworten