Tree/ListIcon : Abfrage welche Checkbox ...

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Tree/ListIcon : Abfrage welche Checkbox ...

Beitrag von Bisonte »

Hallo.

Irgendwie hab ich grad eine Blockade...

Wie ermittel ich den Eintrag eines Tree/ListIconGadgets, dessen Checkbox sich gerade durch Linksklick geändert hat ?

Mit GetGadgetState() bekomm ich immer -1 (also kein Eintrag gewählt) zurück nach einer Abfrage des EventTypes()
oder das zuletzt direkt gewählte Item...

Um GetGadgetItemState zu benutzen brauch ich den ja ....

-------------------------------------------------------------------------------------------------------------------------------------------------------------------

Tante Edith sagt:

Hat sich grad erledigt.
Im englischen Forum hat netmaestro eine Variante gepostet : http://www.purebasic.fr/english/viewtop ... 73#p267873

(falls es jemand auch brauchen kann...)

und Onkel Änder sagt :
Da hab ich dann gleich mal eine Prozedur für ListIcon gemacht...

Code: Alles auswählen

Procedure GetListIcon_CheckBoxChangedItem(Gadget)
  
  Protected cp.POINT, hti.LVHITTESTINFO
  
  If IsGadget(Gadget)
    If GadgetType(Gadget) = #PB_GadgetType_ListIcon
      GetCursorPos_(cp.POINT)
      MapWindowPoints_(0,GadgetID(Gadget),cp,1)
      With hti.LVHITTESTINFO
        \pt\x = cp\x
        \pt\y = cp\y
        \flags = #LVHT_ONITEM
      EndWith
      SendMessage_(GadgetID(Gadget),#LVM_HITTEST,0,hti)
      ProcedureReturn hti\iitem   
    EndIf
  EndIf
  
  ProcedureReturn -1
  
EndProcedure
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
matbal
Beiträge: 261
Registriert: 30.03.2011 20:53

Re: Tree/ListIcon : Abfrage welche Checkbox ...

Beitrag von matbal »

Das scheint mir aber nicht ganz zuverlässig zu sein...
Die Procedure gibt eigentlich nur die Nummer des Eintrages wieder, auf dem sich die Maus gerade befindet.

Die CheckBox kann aber auch per Tastatur ausgewählt werden. Dann befindet sich die Maus ganz woanders, die Procedure gibt daher etwas Falsches zurück.
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: Tree/ListIcon : Abfrage welche Checkbox ...

Beitrag von Bisonte »

Aber wenn man eine Checkbox per Tastatur ansteuert ist immer ein Item auch angewählt....
Will sagen, bei GetGadgetstate() kommt auch das richtige Item bei raus.

Code: Alles auswählen

Procedure ItemSelector(Gadget)
  Protected a = GetGadgetState(Gadget)
  Protected b = GetListIcon_CheckBoxChangedItem(Gadget)
  If a>-1
    If b=a
      If GetGadgetItemState(Gadget,a) & #PB_ListIcon_Checked = #True
        SetGadgetItemState(Gadget,a,0|#PB_ListIcon_Selected)
      Else
        SetGadgetItemState(Gadget,a,#PB_ListIcon_Checked|#PB_ListIcon_Selected)
      EndIf
    EndIf          
  EndIf
EndProcedure

; und dann in der EventLoop

  Event = WaitWindowEvent(25)
  
  Select Event
    Case #PB_Event_Gadget
      If EventGadget() And EventType() = #PB_EventType_LeftClick
        ItemSelector(EventGadget())
      EndIf
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Antworten