Ein wenig Code würde wohl mehr sagen.
Unterscheidung LeftClick und LeftDoubleClick bei EventType()
- ProgOldie
- Beiträge: 236
- Registriert: 19.05.2012 17:09
- Computerausstattung: Windows11, Arduinos, Pi3, PureBasic 6.02
Re: Unterscheidung LeftClick und LeftDoubleClick bei EventTy
Gibt es inzwischen eine stets funktionierende Lösung in Gestalt einer Prozedur, die den Eventtyp so zurückcht, dass bei Doppelklick wirklich nur Doppelklick zurückgereicht wird? In allen übrigen Fällen soll der Eventtyp zurückgereicht werden.
Hintergrund: Wenn ich z.B. auf ein Listicongadget klicke, will ich bei Single- bzw. Doppeklick ganz unterschiedliche Ereignisse auslösen.
Das ist doch eine ganz grundlegende Aufgabe, die Windows dauernd erledigt.
Danke für das Einlesen in dieses "Oldie-Problem".
Hintergrund: Wenn ich z.B. auf ein Listicongadget klicke, will ich bei Single- bzw. Doppeklick ganz unterschiedliche Ereignisse auslösen.
Das ist doch eine ganz grundlegende Aufgabe, die Windows dauernd erledigt.
Danke für das Einlesen in dieses "Oldie-Problem".
Windows10 / PB5.70 / Arduino (-Due) / Raspberry Pi3 /Linux Mint 18
Re: Unterscheidung LeftClick und LeftDoubleClick bei EventTy
Das stimmt. Bei Windows wird mit einem EinfachKlick eine Datei ausgewählt und mit einem DoppelKlick eine Datei geöffnet.ProgOldie hat geschrieben:Hintergrund: Wenn ich z.B. auf ein Listicongadget klicke, will ich bei Single- bzw. Doppeklick ganz unterschiedliche Ereignisse auslösen.Das ist doch eine ganz grundlegende Aufgabe, die Windows dauernd erledigt.Danke für das Einlesen in dieses "Oldie-Problem".
Aber auch unter Windows wird eine Datei immer zuerst ausgewählt und dann geöffnet, wenn ein DoppelKlick kommt.
Auch hier wird der EinfachKlick also nicht ignoriert.
Ich glaube nicht, dass eine solche Lösung zu deiner zufriedenheit wäre, denn:ProgOldie hat geschrieben:Gibt es inzwischen eine stets funktionierende Lösung in Gestalt einer Prozedur, die den Eventtyp so zurückcht, dass bei Doppelklick wirklich nur Doppelklick zurückgereicht wird? In allen übrigen Fällen soll der Eventtyp zurückgereicht werden.
Das würde ja bedeuten, dass jeder EinfachKlick immer eine Aktionsverzögerung von mindestens DoubleClickTime() hat, was je nach Benutzer von 200ms bis 1000ms dauern kann, was für den nutzer dann extrem nertig sein kann.
Denn wie gesagt, du weißt vllt wann du ein Doppelklick machst, aber das Programm nicht.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: Unterscheidung LeftClick und LeftDoubleClick bei EventTy
Ist tatsächlich blöd, wenn ein Einfachklick erst verspätet ausgewertet wird.STARGÅTE hat geschrieben:Ich glaube nicht, dass eine solche Lösung zu deiner zufriedenheit wäre, denn:
Das würde ja bedeuten, dass jeder EinfachKlick immer eine Aktionsverzögerung von mindestens DoubleClickTime() hat, was je nach Benutzer von 200ms bis 1000ms dauern kann, was für den nutzer dann extrem nertig sein kann.
Denn wie gesagt, du weißt vllt wann du ein Doppelklick machst, aber das Programm nicht.
Code: Alles auswählen
mouseDblClickTime = GetDoubleClickTime_()
Debug mouseDblClickTime
Enumeration 1
#SingleClick
#DoubleClick
EndEnumeration
Global clickType
Procedure OnClickTimer()
RemoveWindowTimer(0,1)
If clickType = #SingleClick
Debug "Single Click"
ElseIf clickType = #DoubleClick
Debug "Double Click"
EndIf
clickType = 0
EndProcedure
Procedure OnLeftClick()
If clickType <> #DoubleClick
clickType = #SingleClick
AddWindowTimer(0,1,GetDoubleClickTime_()+20)
EndIf
EndProcedure
Procedure OnLeftDblClick()
clickType = #DoubleClick
EndProcedure
If OpenWindow(0, 0, 0, 300, 200, "ListIcon Example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListIconGadget(0, 5, 5, 290, 190, "Name", 100, #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection)
AddGadgetColumn(0, 1, "Address", 250)
AddGadgetItem(0, -1, "Harry Rannit"+Chr(10)+"12 Parliament Way, Battle Street, By the Bay")
AddGadgetItem(0, -1, "Ginger Brokeit"+Chr(10)+"130 PureBasic Road, BigTown, CodeCity")
BindGadgetEvent(0,@OnLeftClick() ,#PB_EventType_LeftClick)
BindGadgetEvent(0,@OnLeftDblClick(),#PB_EventType_LeftDoubleClick)
BindEvent(#PB_Event_Timer,@OnClickTimer(),0,1)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIfAllerdings sagt MSDN auch, dass ein Einfachklick eine Aktion ausführt, und eine später eintreffende Doppelklickbenachrichtigung die Einzelklick-Aktion erweitert:
- MSDN: About Mouse Input >> Client Area Mouse Messages >> Double-Click Messages
Ein Einzelklick in einem ListIconGadget sollte einen Eintrag auswählen, und ein Doppelklick könnte dann eine erweiterte Funktion sein (Dialog öffnen etc).A double-click message is always the third message in a four-message series. The first two messages are the button-down and button-up messages generated by the first click.
The second click generates the double-click message followed by another button-up message. For example, double-clicking the left mouse button generates the following message sequence:
1. WM_LBUTTONDOWN
2. WM_LBUTTONUP
3. WM_LBUTTONDBLCLK
4. WM_LBUTTONUP
Because a window always receives a button-down message before receiving a double-click message, an application typically uses a double-click message to extend a task it began during a button-down message.
For example, when the user clicks a color in the color palette of Microsoft Paint, Paint displays the selected color next to the palette. When the user double-clicks a color, Paint displays the color and opens the Edit Colors dialog box.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Re: Unterscheidung LeftClick und LeftDoubleClick bei EventTy
Mit PB 4.60 wurde die plattform-unabhängige PB-Funktion DoubleClickTime() zur Ermittlung des Doppelklick-Zeitintervalls eingeführt, sodass es nicht mehr nötig ist, die Windows-spezifische API-Funktion GetDoubleClickTime_() zu verwenden... 
Re: Unterscheidung LeftClick und LeftDoubleClick bei EventTy
Habe ich wohl verpasst, da ich diese Funktion nur sehr selten brauche. 
Benutze sonst immer direkt #PB_EventType_LeftClick und #PB_EventType_LeftDoubleClick.
Benutze sonst immer direkt #PB_EventType_LeftClick und #PB_EventType_LeftDoubleClick.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
- ProgOldie
- Beiträge: 236
- Registriert: 19.05.2012 17:09
- Computerausstattung: Windows11, Arduinos, Pi3, PureBasic 6.02
Re: Unterscheidung LeftClick und LeftDoubleClick bei EventTy
Danke erst einmal für die Erläuterungen. Danilos Programm funktioniert jedenfalls so wie ich es gern hätte. Allerdings hat Stargate recht, es bedeutet halt immer eine Verzögerung, und die kann man nicht umgehen.
Ich werde einmal testen, inwieweit man mit SetDoubleClickTime_() die Zeit von momentan 500ms (Voreinstellung) vielleicht noch heruntersetzen kann.
Ursprünglich hatte ich die Idee, mit WaitWindowEvent(DoubleClickTime()+10) eine Warteschleife einzubauen. Irgendwie hat das aber nicht geklappt.
Ich werde einmal testen, inwieweit man mit SetDoubleClickTime_() die Zeit von momentan 500ms (Voreinstellung) vielleicht noch heruntersetzen kann.
Ursprünglich hatte ich die Idee, mit WaitWindowEvent(DoubleClickTime()+10) eine Warteschleife einzubauen. Irgendwie hat das aber nicht geklappt.
Windows10 / PB5.70 / Arduino (-Due) / Raspberry Pi3 /Linux Mint 18
Re: Unterscheidung LeftClick und LeftDoubleClick bei EventTy
Was möchtest Du denn bei Einfach- und Doppelklick machen? Laut MS sollten die beiden Funktionen logisch aufeinander aufbauen
oder sich ergänzen, und sich nicht gegenseitig ausschließen.
oder sich ergänzen, und sich nicht gegenseitig ausschließen.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Re: Unterscheidung LeftClick und LeftDoubleClick bei EventTy
Finde ich nicht gut. Wenn mir ein Programm meine Einstellungen in dieser Art verändern würde, dann wäre es die längste Zeit auf meiner Festplatte gewesen.ProgOldie hat geschrieben: Ich werde einmal testen, inwieweit man mit SetDoubleClickTime_() die Zeit von momentan 500ms (Voreinstellung) vielleicht noch heruntersetzen kann.
Ursprünglich hatte ich die Idee, mit WaitWindowEvent(DoubleClickTime()+10) eine Warteschleife einzubauen. Irgendwie hat das aber nicht geklappt.

