Seite 1 von 1

ListIconGadget feuert 2 Events?

Verfasst: 09.05.2014 14:38
von _JON_
Hallo Leute, sagt mal mach ich hier irgendwas falsch?

Wenn ich ins leere ListIconGadget klicke gibt er mir einmal eine Antwort, wie erwartet.
Doch klicke Ich auf Zeile1 oder Zeile1, antworted er 2mal :shock:

Code: Alles auswählen

OpenWindow(0, 0, 0, 480, 300, "ListIconGadgets", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListIconGadget(1,  10, 10, 400, 280, "Column 1", 100)  
AddGadgetItem(1, -1, "Zeile1")
AddGadgetItem(1, -1, "Zeile2")

Repeat
  Event = WaitWindowEvent()
  Select Event
      
    Case #PB_Event_Gadget
      Select EventGadget()
        Case 1
          Debug GetGadgetState(1)
      EndSelect
  EndSelect
Until Event = #PB_Event_CloseWindow

Re: ListIconGadget feuert 2 Events?

Verfasst: 09.05.2014 14:42
von RSBasic
Das ist normal. Es gibt in der Event-Verwaltung mehrere Events, die ausgelöst werden.
Um dein Problem beheben zu können, benutze EventType():

Code: Alles auswählen

OpenWindow(0, 0, 0, 480, 300, "ListIconGadgets", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListIconGadget(1,  10, 10, 400, 280, "Column 1", 100) 
AddGadgetItem(1, -1, "Zeile1")
AddGadgetItem(1, -1, "Zeile2")

Repeat
  Event = WaitWindowEvent()
  Select Event
     
    Case #PB_Event_Gadget
      Select EventGadget()
        Case 1
          Select EventType()
            Case #PB_EventType_LeftClick
              Debug GetGadgetState(1)
          EndSelect
      EndSelect
  EndSelect
Until Event = #PB_Event_CloseWindow

Re: ListIconGadget feuert 2 Events?

Verfasst: 09.05.2014 14:45
von ts-soft

Code: Alles auswählen

EnableExplicit

OpenWindow(0, 0, 0, 480, 300, "ListIconGadgets", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListIconGadget(1,  10, 10, 400, 280, "Column 1", 100) 
AddGadgetItem(1, -1, "Zeile1")
AddGadgetItem(1, -1, "Zeile2")

Define Event

Repeat
  Event = WaitWindowEvent()
  Select Event
     
    Case #PB_Event_Gadget
      Select EventGadget()
        Case 1
          Select EventType()
            Case #PB_EventType_Change
              Debug "Change"
            Case #PB_EventType_LeftClick
              Debug "LeftClick"
          EndSelect
          Debug GetGadgetState(1)
          Debug "--------------"
      EndSelect
  EndSelect
Until Event = #PB_Event_CloseWindow 

Re: ListIconGadget feuert 2 Events?

Verfasst: 09.05.2014 14:48
von _JON_
Wow, Danke für die schnelle Antwort :allright:

EventType() und #PB_EventType_Change war genau was ich vergessen hatte.

Re: ListIconGadget feuert 2 Events?

Verfasst: 20.06.2014 11:30
von _JON_
Also irgendwie hab ich schon wieder so ein Problem /:->

Und zwar möchte ich diesmal wissen auf welche Check Box grade geklickt wurde.
Allerdings wird die Zeile dabei nicht ausgewählt, weshalb mir GetGadgetState(1) nicht das gewünschte Ergebnis liefert.

Code: Alles auswählen

EnableExplicit

OpenWindow(0, 0, 0, 480, 300, "ListIconGadgets", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListIconGadget(1,  10, 10, 400, 280, "Column 1", 100, #PB_ListIcon_CheckBoxes) 
AddGadgetItem(1, -1, "Zeile1")
AddGadgetItem(1, -1, "Zeile2")

Define Event

Repeat
  Event = WaitWindowEvent()
  Select Event
     
    Case #PB_Event_Gadget
      Select EventGadget()
        Case 1
          Select EventType()
            Case #PB_EventType_Change
              Debug "Change"
            Case #PB_EventType_LeftClick
              Debug "LeftClick"
          EndSelect
          Debug GetGadgetState(1)
          Debug "--------------"
      EndSelect
  EndSelect
Until Event = #PB_Event_CloseWindow

Re: ListIconGadget feuert 2 Events?

Verfasst: 20.06.2014 15:12
von HeX0R
Ja, das ist normal, siehe auch diese Diskussion.

Das Problem ist, dass ein Anhaken einer Checkbox ja nicht zwangsläufig auch die ausgewählte Zeile ändern soll.
Von daher musst Du Dir da selbst was basteln.

Re: ListIconGadget feuert 2 Events?

Verfasst: 20.06.2014 15:41
von _JON_
Danke HeXOR, das ist genau was ich brauche.
Hab es mal etwas aktualisiert und poste es hier das Ich es auch später wiederfinde.

Code: Alles auswählen

EnableExplicit

#MyWindow = 0 
#MyGadget = 1 

Procedure myWindowCallback(hWnd, msg, wParam, lParam) 
  Protected result = #PB_ProcessPureBasicEvents 
  Select msg 
    Case #WM_NOTIFY 
       Protected *NMLISTVIEW.NMLISTVIEW  = lParam 
      Select *NMLISTVIEW\hdr\code
        Case #LVN_ITEMCHANGED 
          *NMLISTVIEW.NMLISTVIEW = lParam 
          Select *NMLISTVIEW\uNewState >> 12 & $FFFF
            Case 1 
              Debug "CheckBox #" + Str(*NMLISTVIEW\iItem) + " aktiviert!"
            Case 2
              Debug "CheckBox #" + Str(*NMLISTVIEW\iItem) + " deaktiviert!"
          EndSelect 
      EndSelect 
  EndSelect 
  ProcedureReturn result
EndProcedure 

Define event

If OpenWindow(#MyWindow, 100, 100, 350, 140, "ListIcon Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  CreateStatusBar(0, WindowID(0)) 
  ListIconGadget(#MyGadget, 5, 5, 340, 110, "Name", 100, #PB_ListIcon_CheckBoxes | #PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection) 
  AddGadgetColumn(#MyGadget, 1, "Address", 250) 
  AddGadgetItem(#MyGadget, -1, "Harry Rannit" + Chr(10) + "12 Parliament Way, Battle Street, By the Bay") 
  AddGadgetItem(#MyGadget, -1, "Ginger Brokeit" + Chr(10) + "130 PureBasic Road, BigTown, CodeCity") 
  SetWindowCallback(@myWindowCallback()) 
  Repeat 
    event = WaitWindowEvent() 
  Until event = #PB_Event_CloseWindow 
EndIf