Seite 2 von 2
Re: Doppelklick auf Gadget
Verfasst: 30.12.2010 17:38
von Velindos
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
Re: Doppelklick auf Gadget
Verfasst: 01.02.2011 19:32
von Velindos
Hallo,
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
Re: Doppelklick auf Gadget
Verfasst: 04.02.2011 03:02
von edel
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
Verfasst: 05.02.2011 18:01
von Velindos
Hallo,
habs in die obige Source eingebaut, funtkioniert aber nicht, löst ständig aus!
Gruss Velindos
Re: Doppelklick auf Gadget
Verfasst: 05.02.2011 19:35
von edel
Der ganze Code ist eh vermurkst.
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())
Du uberschreibst gOldEditProc, somit kommt es sicherlich zu einem Fehlverhalten.