Seite 1 von 2

Auf-/Zuklappen bei Doppelklick bei Treegadget abschalten

Verfasst: 25.09.2015 14:58
von NicTheQuick
Hallo Leute,

wie kann ich dem Treegadget abgewöhnen bei Doppelklick den entsprechenden Eintrag auf- bzw. zuzuklappen? Ich möchte nämlich bei einem Doppelklick etwas anderes tun. Auf- und zuklappen kann man ja immer noch über das [+] und [-] Zeichen.

Muss da ein WindowCallback her oder geht das auch anders?

Re: Auf-/Zuklappen bei Doppelklick bei Treegadget abschalten

Verfasst: 25.09.2015 16:07
von Kiffi
Aufklappen verhindern:

Code: Alles auswählen

Procedure TreeGadgetEvent()
  Protected SelectedItem = GetGadgetState(#myTree)
  SetGadgetItemState(#myTree, SelectedItem, #PB_Tree_Expanded |  GetGadgetItemState(#myTree, SelectedItem))
EndProcedure

BindGadgetEvent(#myTree, @TreeGadgetEvent(), #PB_EventType_LeftDoubleClick)
(für's Zuklappen verhindern habe ich momentan keine Muße; bekommst Du aber sicherlich selber hin)

Zuckelt zwar ein wenig, aber besser als nix ;-)

Grüße ... Peter

Re: Auf-/Zuklappen bei Doppelklick bei Treegadget abschalten

Verfasst: 25.09.2015 16:09
von RSBasic
Kurze Frage, bevor ich anfange, was zu schreiben: Für Windows oder Linux? Oder beide Betriebssysteme?

Re: Auf-/Zuklappen bei Doppelklick bei Treegadget abschalten

Verfasst: 25.09.2015 16:21
von NicTheQuick
Für beide wäre top. Für Windows aber momentan ausreichend.

Re: Auf-/Zuklappen bei Doppelklick bei Treegadget abschalten

Verfasst: 28.09.2015 10:42
von NicTheQuick
Schon eine Idee, RSBasic? *drängel* <)

Ich brauche es nur unter Windows. In Linux geht das mit dem Doppelklick eh nicht. :wink:

Re: Auf-/Zuklappen bei Doppelklick bei Treegadget abschalten

Verfasst: 28.09.2015 12:14
von GPI
Ist gar nicht so schwer:

In der Callbackschleife muss man auf #WM_Notify reagieren und da auf #nm_dbclick. Wenn man mit Procedurereturn ungleich 0 antwortet, wird die Nachricht verschluckt.
in *msg\hwndFrom kann man feststellen welches Treegadget betroffen ist (ich hab mal ein primitives global für TreeGadget0 benutzt).

https://msdn.microsoft.com/en-us/librar ... 85%29.aspx

Mehr Infos über das TreeView Control:
https://msdn.microsoft.com/en-us/librar ... 85%29.aspx

Viel Spaß.

Achja: Ich hab jetzt nicht getestet, ob du dann überhaupt noch eine Meldung bekommst, ob ein Doppelklick auf das TreeGadget erfolgt ist. Möglich, das die Meldung komplett geschluckt wird und du mit PostEvent(Event [, Window, Object [, Type [, Data]]]) was bauen musst. Eventuell mit #PB_Event_FirstCustomValue als event und das in deinen Routinen auf das Gadget zurück biegst.

Code: Alles auswählen

EnableExplicit
Global TreeGadget

Procedure WinCallback(hWnd, uMsg, WParam, LParam) 
  ; Windows fills the parameter automatically, which we will use in the callback...
  ;Debug "xx"+TreeGadget+" "+hwnd  +" "+Hex(umsg)
  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
      Debug "doubleclick on "+ *msg\hwndFrom +"  (tree0:"+TreeGadget+")"
      ProcedureReturn 1; verschlucken
    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
  TreeGadget=GadgetID(0)
  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 : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf

Re: Auf-/Zuklappen bei Doppelklick bei Treegadget abschalten

Verfasst: 28.09.2015 12:38
von RSBasic
Oh, ich habs vergessen, sorry. :oops: Ein Computerspiel war schuld. :D

Re: Auf-/Zuklappen bei Doppelklick bei Treegadget abschalten

Verfasst: 29.09.2015 20:33
von GPI
@nick
hat mein Code dir geholfen?

Re: Auf-/Zuklappen bei Doppelklick bei Treegadget abschalten

Verfasst: 30.09.2015 10:09
von NicTheQuick
Ich hab ihn zwar getestet, aber noch nicht für mich ausgebaut. Ich brauche bei einem Doppelklick ja noch die Position des angeklickten Eintrags. Aber das krieg ich bestimmt auch alleine hin, sobald ich Zeit finde. :wink:

Re: Auf-/Zuklappen bei Doppelklick bei Treegadget abschalten

Verfasst: 30.09.2015 10:43
von Andreas21
Die Position dürftest du mit GetGadgetState(#Gadget) heraus bekommen.