Hallo,
hört sich gut an! Haben gerade so vor mich hin siniert, zum Beispiel Strg+Linker Klick mit Mouse auf Stringgadet wäre noch möglich um im OS zu bleiben. Wie das geht habe ich keine Ahnung, genau wie vorher, also nicht mein Tag!
Gruss ... Velindos
Doppelklick auf Gadget
Re: Doppelklick auf Gadget
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Re: Doppelklick auf Gadget
Hallo,
richte gerade über verschiedene Lösungen.
Hier ein fertiges Beispiel für den Doppelklick auf Editor-, Image- & Stringgadget.
Gruss ... Velindos
richte gerade über verschiedene Lösungen.
Hier ein fertiges Beispiel für den Doppelklick auf Editor-, Image- & Stringgadget.
Code: Alles auswählen
EnableExplicit
Global DPLCLICKSTRING
Global DPLCLICKIMAGE
Global DPLCLICKEDITOR
Global gOldEditProc
Global test
Procedure DPLCLICKSTRING(hWnd, uMsg, wParam, lParam)
Protected result
Select uMsg
Case #WM_LBUTTONDBLCLK
MessageRequester("Ausgabe", "Links doppelt geklickt stringgadget")
result = 0
Default
result = CallWindowProc_(gOldEditProc, hWnd, uMsg, wParam, lParam)
EndSelect
ProcedureReturn result
EndProcedure
Procedure DPLCLICKIMAGE(hWnd, uMsg, wParam, lParam)
Protected result
Select uMsg
Case #WM_LBUTTONDBLCLK
MessageRequester("Ausgabe", "Links doppelt geklickt auf Image")
result = 0
Default
result = CallWindowProc_(gOldEditProc, hWnd, uMsg, wParam, lParam)
EndSelect
ProcedureReturn result
EndProcedure
Procedure DPLCLICKEDITOR(hWnd, uMsg, wParam, lParam)
Protected result
Select uMsg
Case #WM_LBUTTONDBLCLK
MessageRequester("Ausgabe", "Links doppelt geklickt auf Editorgadgeet")
result = 0
Default
result = CallWindowProc_(gOldEditProc, hWnd, uMsg, wParam, lParam)
EndSelect
ProcedureReturn result
EndProcedure
If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
StringGadget(1,10,10,200,20,"Klicke doppelt linke Maustaste...",0)
ImageGadget (2,280,50,70,70,test, #PB_Image_Border )
EditorGadget(3, 120, 50, 150, 140)
gOldEditProc = SetWindowLongPtr_(GadgetID(1), #GWL_WNDPROC, @DPLCLICKSTRING())
gOldEditProc = SetWindowLongPtr_(GadgetID(2), #GWL_WNDPROC, @DPLCLICKIMAGE())
gOldEditProc = SetWindowLongPtr_(GadgetID(3), #GWL_WNDPROC, @DPLCLICKEDITOR())
Repeat
Define Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
EndIf
Gruss ... Velindos
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Re: Doppelklick auf Gadget
Der Aufbau des Callbacks ist nicht so optimal. Wenn der Doppelklick abgefangen werden aber dennoch markieren soll, darf man nicht 0 zurueck geben, sondern den Rueckgabewert von CallWindowProc_.
Code: Alles auswählen
PROCEDURE editproc(hWnd, uMsg, wParam, lParam)
PROTECTED result
IF uMsg = #WM_LBUTTONDBLCLK
DEBUG "Links doppelt geklickt"
ENDIF
PROCEDURERETURN CallWindowProc_(gOldEditProc, hWnd, uMsg, wParam, lParam)
ENDPROCEDURE
Re: Doppelklick auf Gadget
Hallo,
habs in die obige Source eingebaut, funtkioniert aber nicht, löst ständig aus!
Gruss Velindos
habs in die obige Source eingebaut, funtkioniert aber nicht, löst ständig aus!
Gruss Velindos
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Re: Doppelklick auf Gadget
Der ganze Code ist eh vermurkst.
Du uberschreibst gOldEditProc, somit kommt es sicherlich zu einem Fehlverhalten.
Code: Alles auswählen
gOldEditProc = SetWindowLongPtr_(GadgetID(1), #GWL_WNDPROC, @DPLCLICKSTRING())
gOldEditProc = SetWindowLongPtr_(GadgetID(2), #GWL_WNDPROC, @DPLCLICKIMAGE())
gOldEditProc = SetWindowLongPtr_(GadgetID(3), #GWL_WNDPROC, @DPLCLICKEDITOR())