GetDoubleClickTime() [erledigt]

Fragen rund um diverse Windows-Versionen, ihr Verhalten unter Xbase++ und den Umgang mit der API

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

GetDoubleClickTime() [erledigt]

Beitrag 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
Zuletzt geändert von AUGE_OHR am Fr, 01. Apr 2011 6:36, insgesamt 1-mal geändert.
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: GetDoubleClickTime()

Beitrag 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.
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: GetDoubleClickTime()

Beitrag von AUGE_OHR »

brandelh hat geschrieben:Im Xbase++ Beispiel XbpSortedQuickBrowse()...
em ... äh ... ich finde es nicht ?
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: GetDoubleClickTime()

Beitrag 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.
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: GetDoubleClickTime()

Beitrag 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
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: GetDoubleClickTime()

Beitrag von AUGE_OHR »

Nachtrag : auch den xbeM_Motion Event sollte man abarbeiten "bevor" man mit dem "Dragdrop" beginnt.
gruss by OHR
Jimmy
Antworten