Auf-/Zuklappen bei Doppelklick bei Treegadget abschalten

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8820
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Auf-/Zuklappen bei Doppelklick bei Treegadget abschalten

Beitrag 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?
Benutzeravatar
Kiffi
Beiträge: 10719
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Auf-/Zuklappen bei Doppelklick bei Treegadget abschalten

Beitrag 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
a²+b²=mc²
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Auf-/Zuklappen bei Doppelklick bei Treegadget abschalten

Beitrag von RSBasic »

Kurze Frage, bevor ich anfange, was zu schreiben: Für Windows oder Linux? Oder beide Betriebssysteme?
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8820
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Auf-/Zuklappen bei Doppelklick bei Treegadget abschalten

Beitrag von NicTheQuick »

Für beide wäre top. Für Windows aber momentan ausreichend.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8820
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Auf-/Zuklappen bei Doppelklick bei Treegadget abschalten

Beitrag von NicTheQuick »

Schon eine Idee, RSBasic? *drängel* <)

Ich brauche es nur unter Windows. In Linux geht das mit dem Doppelklick eh nicht. :wink:
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: Auf-/Zuklappen bei Doppelklick bei Treegadget abschalten

Beitrag 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
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Auf-/Zuklappen bei Doppelklick bei Treegadget abschalten

Beitrag von RSBasic »

Oh, ich habs vergessen, sorry. :oops: Ein Computerspiel war schuld. :D
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: Auf-/Zuklappen bei Doppelklick bei Treegadget abschalten

Beitrag von GPI »

@nick
hat mein Code dir geholfen?
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8820
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Auf-/Zuklappen bei Doppelklick bei Treegadget abschalten

Beitrag 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:
Andreas21
Beiträge: 390
Registriert: 30.08.2004 09:05
Computerausstattung: Desktop
Windows 10 Pro x64
CPU: AMD Ryzen 5 2600 3.40 GHz
Ram: 16GB RAM
Grafik: NVIDA Geforce 1060
PB: 5.72 X86/X64
Wohnort: Heidelberg

Re: Auf-/Zuklappen bei Doppelklick bei Treegadget abschalten

Beitrag von Andreas21 »

Die Position dürftest du mit GetGadgetState(#Gadget) heraus bekommen.
Windows 10 x64 Pro - PB 5.61 X64 / x32 - PB 4.6 x32
Antworten