Hi ho Freaks,
ich möchte bei einem MouseDown-Event, dass der dortige Code erst ausgeführt wird, wenn die Maustaste eine bestimmte Zeit, sagen wir 100 ms, gedrückt gehlten wurde.
Wurde sie weniger lange gedrückt soll - im MouseDown-Event - nix passieren, sondern lediglich der Code im MouseUp-Event ausgeführt werden.
Hintergrund:
Über 200 Labels, die per Drag&Drop die Captions tauschen können. Das D&D wird mit der LMT ausgeführt. Alternativ dazu wird bei einem Klick mit der LMT die Caption des aktuellen Labels geändert.
Darum brauche ich eine Art Weiche, welche dem Klick den Vorang gibt.
Hat da jemand von Euch eine gute Idee?
Hier mal mein MouseDown-Event, passiert wirklich nix weltbewegendes, es wird lediglich das D&D „vorbereitet“…
Private Sub myLabel_MouseDown( _
ByVal Button As Integer, _
ByVal Shift As Integer, _
ByVal X As Single, ByVal Y As Single)
'mein Teil (kann man erkennen, dass es ne Art Stopp-Uhr sein soll) *g*
intSTime = Format(Now, „ss,000“)
Do Until Format(Now, „ss,000“) > intSTime + 0.1
intETime = Format(Now, „ss,000“)
Loop
MsgBox intETime - intSTime
'Drag&Drop-Teil
myLabel.Parent.Tag = myLabel.Name
End Sub
Hier noch meine - zeit-kram-bezogenen - Deklarationen im Modul…
Private Declare Function GetTickCount Lib „kernel32“ () As Long
Private Declare Sub Sleep Lib „kernel32“ (ByVal dwMilliseconds As Long)
Private Declare Sub GetLocalTime Lib „kernel32.dll“ (lpSystemTime As SYSTEMTIME)
Private Declare Function SetTimer Lib „user32.dll“ (ByVal hWnd As Long, _
ByVal nIDEvent As Long, ByVal uElapse As Long, _
ByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib „user32.dll“ (ByVal hWnd As Long, _
ByVal nIDEvent As Long) As Long
Const WM_TIMER = &H113 ’ Timer-Ereignis trifft ein
Private Type SYSTEMTIME
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
wMilliseconds As Integer
End Type
Private hEvent As Long
…und die dazu gehörigen Subs/Functions:
Sub Warten(ByVal Pause As Long)
Sleep (Pause) 'Angabe in Millisekunden
DoEvents
End Sub
Public Sub GibVergangeneZeit1()
Dim iStart As Long, i As Long, b As Boolean
iStart = GetTickCount
For i = 1 To 65534
Sheets(2).Cells(i, 1).Value = i
Next i
MsgBox „Die Schleife brauchte " & (GetTickCount - iStart) / 1000 & " Sekunden“
End Sub
’ Timer-Prozedur, welche im Abstand der festgelegten
’ Millisekunden ein Ereignis sendet
Public Sub TimerProc(ByVal hWnd As Long, ByVal uMsg As Long, _
ByVal wParam As Long, ByVal lParam As Long)
Dim ST As SYSTEMTIME
If uMsg = WM_TIMER Then
beep
End If
End Sub
’ Startet den Timer
Public Function EnableTimer(ByVal msInterval As Long)
If hEvent 0 Then Exit Function
hEvent = SetTimer(0&, 0&, msInterval, AddressOf TimerProc)
End Function
’ Beendet den Timer
Public Function DisableTimer()
If hEvent = 0 Then Exit Function
KillTimer 0&, hEvent
hEvent = 0
End Function
Ich würd mich echt freuen, wenn jemand, vielleicht sogar recht bald, eine einfache Lösung dafür für mich hat!
Vielen Dank schon einmal jetzt an alle Hilfsbereiten,
liebe Grüße und eine gute Nacht aus Berlin,
Murphy2ooo