TreeGadget Messages für Checkbox abfangen

Anfängerfragen zum Programmieren mit PureBasic.
Jake
Beiträge: 121
Registriert: 28.05.2005 04:10
Wohnort: Berlin

TreeGadget Messages für Checkbox abfangen

Beitrag von Jake »

Hi,

ich möchte die Message des TreeGadgets für das an- oder abwählen der Checkbox abfangen, um diese in einen CallBack zu verarbeiten.
Bislang habe ich nicht rausgefunden welche Message vom TreeGadget dabei gesendet wird.
MfG Jake
Benutzeravatar
Sicro
Beiträge: 963
Registriert: 11.08.2005 19:08
Kontaktdaten:

Beitrag von Sicro »

Hallo Jake,

beim de-/aktivieren einer Checkbox in einem TreeGadget liefert keine Message, jedenfalls nicht über ein Callback mit SetWindowCallback.

Wieso brauchst du dafür eigentlich ein Callback? Das geht doch ganz einfach mit der GetGadgetItemState-Funktion.

Mfg DerProgger
Jake
Beiträge: 121
Registriert: 28.05.2005 04:10
Wohnort: Berlin

Beitrag von Jake »

Das brauche ich um die Subitems des angeklickten Eintrags an- bzw. abzuwählen.
Wenn ich einen Parent-Eintrag anwähle müssen alle subitems auch angewählt werden. Wenn ich aber nicht weiß welcher Parent-Eintrag angewählt wurde geht das nicht oder ich muß alle Einträge bei jedem linksklick überprüfen.
MfG Jake
Benutzeravatar
Sicro
Beiträge: 963
Registriert: 11.08.2005 19:08
Kontaktdaten:

Beitrag von Sicro »

Ich habe dir mal ein Beispiel-Code gebastelt. Der ist zwar noch etwas fehlerhaft (bevor die Haken gesetzt/entfernt werden können muss erst das Item markiert werden ect. :|), aber das sollte dich schon mal etwas weiterbringen.

Code: Alles auswählen

EnableExplicit

Define a, Event, ItemPos, SubLevel, ItemState
Define Pos.POINT

If Not OpenWindow(0,0,0,355,180,"TreeGadget",#PB_Window_SystemMenu | #PB_Window_ScreenCentered): End: EndIf
If Not CreateGadgetList(WindowID(0)): End: EndIf

TreeGadget(0,1,1,WindowWidth(0),WindowHeight(0),#PB_Tree_CheckBoxes)
For a = 0 To 10
  AddGadgetItem(0,-1,"Node " + Str(a),0,0)
    AddGadgetItem(0,-1,"Sub-Item 1",0,1)
      AddGadgetItem(0,-1,"Sub-Item 1",0,2)
      AddGadgetItem(0,-1,"Sub-Item 2",0,2)
      AddGadgetItem(0,-1,"Sub-Item 3",0,2)
      AddGadgetItem(0,-1,"Sub-Item 4",0,2)
    AddGadgetItem(0,-1,"Sub-Item 2",0,1)
      AddGadgetItem(0,-1,"Sub-Item 1",0,2)
      AddGadgetItem(0,-1,"Sub-Item 2",0,2)
      AddGadgetItem(0,-1,"Sub-Item 3",0,2)
      AddGadgetItem(0,-1,"Sub-Item 4",0,2)
    AddGadgetItem(0,-1,"Sub-Item 3",0,1)
      AddGadgetItem(0,-1,"Sub-Item 1",0,2)
      AddGadgetItem(0,-1,"Sub-Item 2",0,2)
      AddGadgetItem(0,-1,"Sub-Item 3",0,2)
      AddGadgetItem(0,-1,"Sub-Item 4",0,2)
    AddGadgetItem(0,-1,"Sub-Item 4",0,1)
      AddGadgetItem(0,-1,"Sub-Item 1",0,2)
      AddGadgetItem(0,-1,"Sub-Item 2",0,2)
      AddGadgetItem(0,-1,"Sub-Item 3",0,2)
      AddGadgetItem(0,-1,"Sub-Item 4",0,2)
Next

Repeat
  Event = WaitWindowEvent()
  
  If Event = #WM_LBUTTONDOWN
    GetCursorPos_(@Pos)
    
    If WindowFromPoint_(Pos\x,Pos\y) = GadgetID(0)
      ItemPos = GetGadgetState(0)
      SubLevel = GetGadgetItemAttribute(0,ItemPos,#PB_Tree_SubLevel)
      ItemState = GetGadgetItemState(0,ItemPos)
      
      ItemPos + 1
      While ItemPos <= CountGadgetItems(0)
        If GetGadgetItemAttribute(0,ItemPos,#PB_Tree_SubLevel) > SubLevel
          SetGadgetItemState(0,ItemPos,ItemState)
        Else
          Break
        EndIf
        ItemPos + 1
      Wend
    EndIf
  EndIf
Until Event = #PB_Event_CloseWindow
End
Mfg DerProgger
Antworten