Deutsch
Forum

Klick auf Headerbuttons wird nicht zuverlässig abgefangen

 
- Seite 1 -



Jörg
Sellmeyer
Hallo Frank,
In Deinem Beispiel Alle_Maustasten_abfangen.prf benutzt Du SetTimer 10 um die Listviewvariablen zu füllen. Ist das die einzige Möglichkeit die Mausklicks auf die Spaltenbuttons sicher zu erwischen?
Ohne geht es nämlich nicht
Ich hab selber auch viel rumprobiert aber meistens wird der zweite gleiche Klick auf einen Spaltenbutton im gleichen Control nicht mehr registriert.
Wenn zwischendurch in das Listview geklickt wird gehts wieder.
Ich hoffe, ich konnte mich einigermaßen verständlich machen
Ach ja - es geht um die linke Maustaste!

Der Einfachheit halber gleich mal Code dazu.
Gruß
Jörg
KompilierenMarkierenSeparieren
 $I Listview_Funktionen.inc
Declare LVDllHdl&
Declare bereich#,status&
Declare text$,x&,y&
Dim bereich#,320
LVDllHdl&=UseDll(Listview.dll)
Declare ListView1&

Proc SetListView1

    InitMessages(%hwnd)
    Declare tmptxt$
    tmptxt$=Spalte 1;Spalte 2;Spalte 3
    IColumn(ListView1&,Addr(tmptxt$),60,0)
    tmptxt$=Spalte 2
    IColumn(ListView1&,Addr(tmptxt$),60,0)
    tmptxt$=Spalte 3
    IColumn(ListView1&,Addr(tmptxt$),60,0)

    WhileLoop 0,6

        AddString(ListView1&,MkStr$(Test  + Format$(00,&Loop) + |,3))

    Wend

    ShowListView(ListView1&,1,1,Width(%hwnd) - 2,Height(%hwnd) - 200)

EndProc

Proc ExitLV

    CloseMessages(%hwnd)
    FreeDll LVDllHdl&

EndProc

UserMessages 16
WindowStyle $218
Window 100,100 - 620,520
ListView1&=CreateListView(%hwnd,%hinstance,0,14417146,-1,$21)
SetListView1
status&=Create(TEXT,%HWND,text$,8,364,600,72)

While 1

    WaitInput
    Case %umessage = 16:Break
    y&=GetControlParas(bereich#)

    If y&=2

        text$=Der rechte Mausknopf wurde in Spalte +Str$(Long(bereich#,4))+ / +Str$(Long(bereich#,8))+ gedrückt.

    ElseIf y&=1

        text$=Der linke Mausknopf wurde in Spalte +Str$(Long(bereich#,4))+ / +Str$(Long(bereich#,8))+ als Doppelklick gedrückt.

    ElseIf y&=3

        text$=Der linke Mausknopf wurde in Spalte +Str$(Long(bereich#,4))+ / +Str$(Long(bereich#,8))+ gedrückt.

    EndIf

    If y&<>0

        text$=text$+Dieses ereignete sich im Listview mit dem Handle +Str$(Long(bereich#,0))+.
        SetText status&,text$

    Endif

    x&=GetVar(2)

    If x&<>-1

        y&=GetVar(3)
        text$=Der rechte Mausknopf wurde über dem Spaltenbutton in Spalte +Str$(x&)+ gedrückt.
        text$=text$+Dieses ereignete sich im Listview mit dem Handle +Str$(y&)+.
        SetText status&,text$

    EndIf

    x&=GetVar(4)

    If x&<>-1

        y&=GetVar(5)
        text$=Der linke Mausknopf wurde über dem Spaltenbutton in Spalte +Str$(x&)+ gedrückt.
        text$=text$+Dieses ereignete sich im Listview mit dem Handle +Str$(y&)+.
        SetText status&,text$

    EndIf

Wend

ExitLV
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
10.03.2007  
 



 
- Seite 1 -



Jörg
Sellmeyer
Das ist schon klar aber jetzt hast Du für die normalen Klicks im Listview GetControlParas und für Headerklicks GetVar und (nur für links) UserMessages.
Wenn Du die UserMessages auch noch für die anderen Klicks einbaust ist die Abfrage einfacher. Also z. B.:
$1401 = Header Link
$1402 = Header Rechts
$1403 = normaler Linksklick
$1404 = normaler Rechtsklick
$1405= Doppelklick

[offtopic] [/offtopic]
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
10.03.2007  
 




Frank
Abbing
Ich habe ja nichts degegen. Das nächte Update kommt bestimmt .
 
10.03.2007  
 




Jörg
Sellmeyer
Frank Abbing
Ich habe ja nichts degegen. Das nächte Update kommt bestimmt .


Das wollte ich hören!
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
10.03.2007  
 




Frank
Abbing

Du hast Deinen Gewinn ausprobiert, stimmts? Ich hörs mir gerade an - ist echt zum piepen!


Halt! Die Sprachausgabe entstammt nicht meinem Gewinn. Damit erzeugte Sprache hört sich nämlich fürchterlich an (nur SAPI) und das Tool ist längst wieder deinstalliert.
Hab mir Voice Reader von linguatec bestellt, das hört sich um Längen besser an...
Das jedenfalls ist meine Meinung.
 
10.03.2007  
 



@Hi Frank


Das jedenfalls ist meine Meinung.


...meine auch !
 
11.03.2007  
 



 
- Seite 2 -



Frank
Abbing

$1403 = normaler Linksklick
$1404 = normaler Rechtsklick
$1405= Doppelklick


Problem: Drei Infos werden hier benötigt: listviewhandle, spaltenindex, zeilenindex.
Per Message kann ich aber nur zwei versenden (lparam und wparam)...
 
11.03.2007  
 




Jörg
Sellmeyer
Den Zeilenindex kann man dann ja wieder mit normalen Profanmitteln oder Listview.dll-Mitteln abfragen.
KompilierenMarkierenSeparieren
If %umessage = $1403

    Zeile& = GetCurSel(&uwparam)
    oder
    GetControlParas(...)
    Zeile& = Long(b#,8)

ElseIf %umessage = $1404

    ...

ElseIf %umessage = $1405

    ...

EndIf


und für die Headerklicks das Gleiche mit anderen Messages. Dann könnte man alle auftretenden Klicks mit einer einheitlichen Methode erwischen und braucht nicht mit verschiedenen zu jonglieren.

Gruß
Jörg
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
11.03.2007  
 




Frank
Abbing
Hab es so gelöst, dass Spalte und Zeile übergeben wird. Mittels GetVar(7) kann der Listview-Handle ermittelt werden, falls erforderlich.
 
11.03.2007  
 




Jörg
Sellmeyer
Poste doch mal ein Beispiel.
Ich fände es besser, wenn das Handle übergeben wird. Dann kann man eine GetFocus ähnliche Funktion definieren, um die Events abfragen.
KompilierenMarkierenSeparieren
So kann man bei mehreren Listviews eleganter abfragen (finde ich zumindest)
KompilierenMarkierenSeparieren
Wie würdest Du es bei Deiner Methode lösen?

Gruß
Jörg
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
11.03.2007  
 




Frank
Abbing

KompilierenMarkierenSeparieren
aklick&=0

If %umessage>=1405 or %umessage<=1408

    sp&=&uwparam
    zl&=&ulparam
    lv&=GetVar(7)
    aklick&=%umessage

EndIf

If aklick&

    text$=Linksklick
    Case aklick&=$1406:text$=Rechtsklick
    Case aklick&=$1407:text$=Doppellinksklick
    Case aklick&=$1408:text$=Doppelrechtsklick
    Print text$+ Listview: ,Str$(lv&)+ (+Str$(sp&)+, +Str$(zl&)+)

EndIf

 
11.03.2007  
 




Jörg
Sellmeyer
Ok, mit dem zusätzlichen Flag bei GetVar() geht es auch so.
Ich würds dann so machen:
KompilierenMarkierenSeparieren
Mit meiner oben beschriebenen Methode benötigt man aber das Flag 7 gar nicht. Dafür braucht man mit Deiner Methode GetControlParas nicht mehr unbedingt...
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
11.03.2007  
 




Frank
Abbing

Dafür braucht man mit Deiner Methode GetControlParas nicht mehr unbedingt...


Gar nicht, würd ich sagen...
Wie mans dreht und wendet ist ja egal.
 
12.03.2007  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

3.045 Betrachtungen

Unbenanntvor 0 min.
Jörg Sellmeyer11.06.2020
Ernst28.07.2016
H.Brill15.06.2014
Unbenannt06.06.2012

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie