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 :D