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