Seite 1 von 1

Tree/ListIcon : Abfrage welche Checkbox ...

Verfasst: 12.01.2012 11:47
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

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

Verfasst: 12.01.2012 12:52
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.

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

Verfasst: 12.01.2012 14:36
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