Die Auswertung von Einzel- und Doppelklicks ist etwas kompliziert, weil (wie von cxAlex richtig beschrieben) erst ein Einzel- und dann ein Doppelklick-Event erfolgt. Im englischen Forum hat srod bereits in einem Beispiel gezeigt, wie man mittels einer Timer-Routine erst abwartet, ob nicht innerhalb eines bestimmten Zeitraums noch ein zweiter (Doppel-)Klick erfolgt (
http://www.purebasic.fr/english/viewtop ... 41&start=7).
Außerdem gibt es beim ExplorerListGadget noch das Problem der Unterscheidung zwischen Einzel- und Doppelklick auf ein Verzeichnis oder eine Datei. Zu diesem Problem hatte ich bereits auch schon einmal ein Beispiel gezeigt (
http://www.purebasic.fr/german/viewtopi ... 6&start=15)
Aus diesen beiden Ansätzen habe ich ein neues Beispiel zusammengestellt, das allerdings zunächst einmal nur Linksklicks auswertet und auf Grund der Verwendung der Windows API-Funktion timeSetEvent() nur unter Windows funktioniert:
Code: Alles auswählen
EnableExplicit
Define DoubleClickReported
Define SuppressSingleClickMsg
Define WindowEvent
Procedure TimerProc(ID, Msg, User, DW1, DW2)
Shared DoubleClickReported
Shared SuppressSingleClickMsg
If SuppressSingleClickMsg = #False And DoubleClickReported = #False
If GetGadgetItemState(0, GetGadgetState(0)) & #PB_Explorer_Directory
Debug "Klick mit der linken Maustaste auf Verzeichnis " + GetGadgetItemText(0, GetGadgetState(0))
Else
Debug "Klick mit der linken Maustaste auf Datei " + GetGadgetItemText(0, GetGadgetState(0))
EndIf
EndIf
DoubleClickReported = #False
SuppressSingleClickMsg = #False
EndProcedure
OpenWindow(0,0,0,800,600,"Test",#PB_Window_SystemMenu)
ExplorerListGadget(0,0,0,800,600,"*.*")
Repeat
WindowEvent = WaitWindowEvent()
If WindowEvent = #PB_Event_Gadget
If EventGadget() = 0
If GetGadgetState(0) = -1
If DoubleClickReported = #False
Debug "Doppelklick mit der linken Maustaste auf Verzeichnis " + GetGadgetText(0)
DoubleClickReported = #True
EndIf
Else
Select EventType()
Case #PB_EventType_LeftDoubleClick
SuppressSingleClickMsg = #True
If GetGadgetItemState(0, GetGadgetState(0)) & #PB_Explorer_File
Debug "Doppelklick mit der linken Maustaste auf Datei " + GetGadgetItemText(0, GetGadgetState(0))
EndIf
Case #PB_EventType_LeftClick
timeSetEvent_(200, 10, @TimerProc(), 0, #TIME_ONESHOT)
EndSelect
EndIf
EndIf
EndIf
Until WindowEvent = #PB_Event_CloseWindow
End