Re: Auf-/Zuklappen bei Doppelklick bei Treegadget abschalten
Verfasst: 30.09.2015 13:04
Ich hab's jetzt so umgeschrieben. Da geht es jetzt zu Testzwecken nur mit TreeGadget 0.
Kann man den WindowCallback nicht auch nur auf ein einzelnen Gadget anwenden, sodass man sicher sein kann, dass der empfangene Doppelklick nur für das TreeGadget gilt.
Hintergrund ist, dass ich ein Modul geschrieben habe, dass ein TreeGadget erstellt und komplett selbst verwaltet. Dieses Modul soll auf genau dieses Gadget dann unabhängig von alle anderen Gadgets einen Callback besitzen, der das Doppelklick-Problem löst. Das heißt bei anderen manuell erstellten TreeGadgets soll der Callback gar nicht erst ausgelöst werden.
Code: Alles auswählen
EnableExplicit
Procedure WinCallback(hWnd, uMsg, WParam, LParam)
; Windows fills the parameter automatically, which we will use in the callback...
If umsg = #WM_NOTIFY
Protected *msg.nmhdr ; Solange nicht gesichert ist, welche Nachricht es ist, darf man nur auf \code zugreifen!
*msg = LParam
If *msg\code = #NM_DBLCLK
If *msg\hwndFrom = GadgetID(0)
;Debug "Doubleclick on Treegadget at position " + Str(GetGadgetState(0))
PostEvent(#PB_Event_Gadget, 0, 0, #PB_EventType_LeftDoubleClick)
ProcedureReturn 1
EndIf
EndIf
EndIf
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
Define id, a
If OpenWindow(0, 0, 0, 355, 180, "TreeGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
TreeGadget(0, 10, 10, 160, 160) ; TreeGadget standard
TreeGadget(1, 180, 10, 160, 160, #PB_Tree_CheckBoxes | #PB_Tree_NoLines); TreeGadget with Checkboxes + NoLines
SetWindowCallback(@WinCallback())
For ID = 0 To 1
For a = 0 To 10
AddGadgetItem (ID, -1, "Normal Item "+Str(a), 0, 0) ; if you want to add an image, use
AddGadgetItem (ID, -1, "Node "+Str(a), 0, 0) ; ImageID(x) as 4th parameter
AddGadgetItem(ID, -1, "Sub-Item 1", 0, 1) ; These are on the 1st sublevel
AddGadgetItem(ID, -1, "Sub-Item 2", 0, 1)
AddGadgetItem(ID, -1, "Sub-Item 3", 0, 1)
AddGadgetItem(ID, -1, "Sub-Item 4", 0, 1)
AddGadgetItem (ID, -1, "File "+Str(a), 0, 0) ; sublevel 0 again
Next
Next
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
If EventType() = #PB_EventType_LeftDoubleClick
Debug "Double Rainbow all the way!"
EndIf
EndSelect
ForEver
EndIfHintergrund ist, dass ich ein Modul geschrieben habe, dass ein TreeGadget erstellt und komplett selbst verwaltet. Dieses Modul soll auf genau dieses Gadget dann unabhängig von alle anderen Gadgets einen Callback besitzen, der das Doppelklick-Problem löst. Das heißt bei anderen manuell erstellten TreeGadgets soll der Callback gar nicht erst ausgelöst werden.