Seite 1 von 1
StringGadget DoubleClick
Verfasst: 18.06.2016 19:37
von marcelx
Hallo,
wie kann ich ein DoubleClick bei ein StringGadget erkennen.
Ich habe es mit EventType() = #WM_LBUTTONDBLCLK oder #PB_EventType_LeftDoubleClick probiert und es geht nicht
Danke für ein Tipps
MarcelX
Re: StringGadget DoubleClick
Verfasst: 18.06.2016 19:56
von RSBasic
Beim StringGadget gibt es nur folgende EventType()-Ereignisse:
- #PB_EventType_Change
- #PB_EventType_Focus
- #PB_EventType_LostFocus
Da gibt es kein #PB_EventType_LeftDoubleClick. Da musst du schon mit WinAPI machen oder selber messen.
Mit WinAPI:
Code: Alles auswählen
EnableExplicit
Global StringGadgetCB
Procedure StringGadgetCB(hWnd, uMsg, wParam, lParam)
Select uMsg
Case #WM_LBUTTONDBLCLK
Debug "Doppelklick"
EndSelect
ProcedureReturn CallWindowProc_(StringGadgetCB, hWnd, uMsg, wParam, lParam)
EndProcedure
If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
StringGadget(1, 10, 10, 480, 20, "", 0)
StringGadgetCB = SetWindowLongPtr_(GadgetID(1), #GWL_WNDPROC, @StringGadgetCB())
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
EndIf
Oder du misst mit ElapsedMilliseconds() und GetDoubleClickTime_() selber die Zeit nach einem Klick. Wenn innerhalb der Doppelklickzeit erneut geklickt wird, dann ist das ein Doppelklick.
Re: StringGadget DoubleClick
Verfasst: 18.06.2016 20:33
von marcelx
Danke für den Code. So funktioniert.
Ich wollte es für mehrere StringGadget verwenden.
Code: Alles auswählen
EnableExplicit
Global StringGadgetCB
Procedure StringGadgetCB(hWnd, uMsg, wParam, lParam)
Select uMsg
Case #WM_LBUTTONDBLCLK
Debug "Doppelklick"
EndSelect
ProcedureReturn CallWindowProc_(StringGadgetCB, hWnd, uMsg, wParam, lParam)
EndProcedure
If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
StringGadget(1, 10, 10, 480, 20, "", 0)
StringGadget(2, 10, 30, 480, 20, "", 0)
StringGadgetCB = SetWindowLongPtr_(GadgetID(1), #GWL_WNDPROC, @StringGadgetCB())
StringGadgetCB = SetWindowLongPtr_(GadgetID(2), #GWL_WNDPROC, @StringGadgetCB())
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
EndIf
Wie kann ich wissen welche StringGadget den DoubleClick gilt?
Re: StringGadget DoubleClick
Verfasst: 18.06.2016 20:37
von RSBasic
Code: Alles auswählen
EnableExplicit
Global StringGadgetCB
Procedure StringGadgetCB(hWnd, uMsg, wParam, lParam)
Select uMsg
Case #WM_LBUTTONDBLCLK
Debug "Doppelklick auf " + Str(GetProp_(hWnd, "PB_ID"))
EndSelect
ProcedureReturn CallWindowProc_(StringGadgetCB, hWnd, uMsg, wParam, lParam)
EndProcedure
If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
StringGadget(1, 10, 10, 480, 20, "", 0)
StringGadget(2, 10, 30, 480, 20, "", 0)
StringGadgetCB = SetWindowLongPtr_(GadgetID(1), #GWL_WNDPROC, @StringGadgetCB())
StringGadgetCB = SetWindowLongPtr_(GadgetID(2), #GWL_WNDPROC, @StringGadgetCB())
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
EndIf
Re: StringGadget DoubleClick
Verfasst: 18.06.2016 21:35
von marcelx
wunderbar
Danke
Re: StringGadget DoubleClick
Verfasst: 19.06.2016 22:04
von udg
eine Frage,
wozu ist das gut, also wozu könnte man das brauchen... als Button?
was hast Du damit vor wenn man fragen darf. Nur aus Interesse.
danke und Grüße
Re: StringGadget DoubleClick
Verfasst: 21.06.2016 13:56
von marcelx
Gute Frage udg
Ich zeige aus eine Datenbank meine Daten.
Ich verwende den gleiche Procedure für das Editieren und Anzeigen meine Daten.
In meine Daten sind es z.B. E-Mails oder URL.
Mit eine Doppelklick starte ich RunProgram(input) oder RunProgram("mailto:"+input).
Grüße
MarcelX
Re: StringGadget DoubleClick
Verfasst: 21.06.2016 14:32
von udg
okay. danke für die Info.
aber die Ausgabe wieder ins Inputfeld ist eher untypisch
dafür würde ich extra Ausgabefelder anlegen.
aber was solls. es muss laufen und den Zweck erfüllen
Re: StringGadget DoubleClick
Verfasst: 21.06.2016 14:37
von marcelx
Beispiel Excel: eine Zelle ist gleichzeitig die Anzeige und Eingabe/Änderung in ein.
Re: StringGadget DoubleClick
Verfasst: 21.06.2016 14:45
von udg
marcelx hat geschrieben:Beispiel Excel: eine Zelle ist gleichzeitig die Anzeige und Eingabe/Änderung in ein.
jap. stimmt.
ich hasse excel
