Verfasst: 05.08.2005 16:01
Du brauchst doch garkein Waitwindowevent() für meine Version.
Ein wenig Code würde wohl mehr sagen.
Ein wenig Code würde wohl mehr sagen.

Das deutsche PureBasic-Forum
https://www.purebasic.fr/german/
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".
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.
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
EndIf
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.
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.