Doppelklick auf Gadget

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Doppelklick auf Gadget

Beitrag 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
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Doppelklick auf Gadget

Beitrag 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
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Doppelklick auf Gadget

Beitrag 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

Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Doppelklick auf Gadget

Beitrag von Velindos »

Hallo,
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)
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Doppelklick auf Gadget

Beitrag 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.
Antworten