Seite 1 von 1

GetDoubleClickTime() [erledigt]

Verfasst: Do, 31. Mär 2011 13:25
von AUGE_OHR
hi,

es gibt ja die Slots o:lbDown und o:lbDblClick ... wie kann ich die "unterscheiden" ?

nun kann man ja "einstellen" wie empfindlich eine Maus reagieren soll und auch die Doppel-Click Geschwindigkeit.

Frage : ist das GetDoubleClickTime() ? http://msdn.microsoft.com/en-us/library ... 85%29.aspx

wenn ja wie "übersetzt" man das und was bekommt man "zurück" ( ULONG -> ? Sec. )

Code: Alles auswählen

<DllImport("user32.dll", CharSet:=CharSet.Auto, ExactSpelling:=True)> _
Public Shared Function GetDoubleClickTime() As Integer
End Function

Re: GetDoubleClickTime()

Verfasst: Do, 31. Mär 2011 15:02
von brandelh
Hallo Jimmy,

wenn deine Aktion z.B. schon auf das Drücken (nicht Klicken) reagieren soll, z.B. beim Anfang von "verschiebe" Operationen dann mußt du im down Slot was regeln.
Das Ende wird in diesen Fällen beim btnup (Name habe ich nicht im Kopf) in der dortigen Methode erledigt. Im Xbase++ Beispiel XbpSortedQuickBrowse() wird so zwischen dem
"Anklicken" der Titelzeile => Sortierung nach dieser Spalte und Breitenänderung der Spalte unterschieden.
Ebenso ist es nötig "ohne" Klick aber erst beim btnup zu reagieren, z.b. um dem Anwender noch einen "Abbruch"-Möglichkeit zu erhalten ...
Er tippt auf die Maus über der Spalte, verschiebt diese und läßt außerhalb erst wieder los.

Ich bin mir nicht sicher, ob das Belegen der botton up, down Slots eventuell den btn klick Event blockiert.

Re: GetDoubleClickTime()

Verfasst: Do, 31. Mär 2011 21:48
von AUGE_OHR
brandelh hat geschrieben:Im Xbase++ Beispiel XbpSortedQuickBrowse()...
em ... äh ... ich finde es nicht ?

Re: GetDoubleClickTime()

Verfasst: Do, 31. Mär 2011 23:39
von AUGE_OHR
hi,

so sieht nun meine DLLFUNCTION aus

Code: Alles auswählen

#include "dll.ch"
DLLFUNCTION GetDoubleClickTime() USING STDCALL FROM User32.dll

PROCEDURE MAIN
LOCAL nTimeout := GetDoubleClickTime()
? nTimeout
WAIT
Die Funktion gibt die Millisekunden zurück, die maximal vergehen dürfen, damit Windows einen Doppelklick erkennt.

Re: GetDoubleClickTime()

Verfasst: Do, 31. Mär 2011 23:55
von AUGE_OHR
brandelh hat geschrieben:wenn deine Aktion z.B. schon auf das Drücken (nicht Klicken) reagieren soll, z.B. beim Anfang von "verschiebe" Operationen dann mußt du im down Slot was regeln.
YUP, das hab ich soweit gelöst.

da ich allerdings zwischen "dragdrop" und "itemselect" unterscheiden will, muss ich beide Events berücksichtigen.
GetDoubleClickTime() ist ja die Zeit ( in Miliisec. ) welche zum "erkennen" im System eingestellt ist oder vom User geändert wurde.
Dies nutze ich nun als "Timeout" in AppEvent() als 4th Parameter

Code: Alles auswählen

METHOD DDCal:LbDown( aPos )
LOCAL nEvent, mp1, mp2, oXbp
LOCAL nTimeout := GetDoubleClickTime() // 500 millisec = 0.500

   ::lDragDrop  := .F.
   ::aPosClick  := ::getcursorPos()
   ::oDlgParent := self
ALTD()
   DO WHILE .T.
      //
      // es gibt sicherlich eine API für die Zeit
      // zwischen 2 Clicks welche als DblClick gilt
      //
      nEvent := AppEvent( @mp1, @mp2, @oXbp, nTimeout/10 )
      DO CASE
         CASE nEvent == xbeE_TerminRefresh
            //
            // Event "weiterleiten"
            //
            PostAppEvent( xbeE_TerminRefresh, mp1,, ::setparent() )
*           MSGBOX("was willst du hier ?!")
            EXIT
            //
            // wenn nochmal die Linke Maustaste innerhalb der Zeit benutzt wurde
            // 
         CASE nEvent == xbeM_LbDblClick
            EXIT
            //
            // dann ist es auch kein "dragdrop" mehr
            //  
         CASE nEvent == xbeM_LbDown
            EXIT
            //
            // nur wenn nicht nochmal die linke Maustaste gedrückt wurde
            // ist es ein "dragdrop"
            //
         CASE nEvent ==  xbe_None                        // Timeout 
            ::lDragDrop := .T.
            EXIT
      OTHERWISE
         oXbp:handleEvent( nEvent, mp1, mp2 )
      ENDCASE
   ENDDO

   IF ::lDragDrop = .T.
       ::machmal()  
   ENDIF

Re: GetDoubleClickTime()

Verfasst: Fr, 01. Apr 2011 6:36
von AUGE_OHR
Nachtrag : auch den xbeM_Motion Event sollte man abarbeiten "bevor" man mit dem "Dragdrop" beginnt.