TreeViewItem und Event

Anfängerfragen zum Programmieren mit PureBasic.
lite
Beiträge: 122
Registriert: 27.08.2012 21:08

TreeViewItem und Event

Beitrag von lite »

Hallo

Habe ein Problem mit Treeviewitems und der Eventverwaltung.
In dem unten aufgeführten Sourcecode, das ich aus dem "CodeArchiv" hab sieht man schön das Problem. Nach dem Starten des Sourcecodes klicke ich mit der Maus ins Treeview, ohne dabei ein Item auszuwählen. Es wird sofort ein Event für das Treeview ausgelöst und schreibt "Login" in die Box auf der rechten Seite. Das sollte nicht so sein. Brauche einen Event nur dann, wen ich auch ein Item anklicke. Der Hintergrund sollte neutral sein. Wie kann man das Abfragen Hintergrund / Item ?

Code: Alles auswählen

#Window_0 = 0 
#Gadget_0 = 0 
#Gadget_1 = 1 


Procedure Open_Window_0() 
  If OpenWindow(#Window_0, 216, 0, 600, 300, "TreeGadget with Functions", #PB_Window_TitleBar  ) 
    TreeGadget(#Gadget_0, 10, 10, 270, 190) 
    StringGadget(#Gadget_1, 300, 10, 280, 40, "") 
    AddGadgetItem(#Gadget_0, 0, "Login") 
    AddGadgetItem(#Gadget_0, 1, "Logoff") 
    AddGadgetItem(#Gadget_0, 2, "End") 
  EndIf 
EndProcedure 

Open_Window_0() 
  
Repeat 
  
  Event = WaitWindowEvent() 
    If Event=#PB_Event_Gadget 
      Select EventGadget() 
        Case #Gadget_0 
          Eintrag=GetGadgetState(#Gadget_0) 
          If Eintrag=0 
           SetGadgetText(#Gadget_1, "Login") 
          ElseIf Eintrag=1 
           SetGadgetText(#Gadget_1, "Logoff") 
          EndIf 
      EndSelect 
    EndIf 
  
Until Eintrag=2 

Grüße
Lite
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: TreeViewItem und Event

Beitrag von mk-soft »

Bei EventGadget() immer EventType() abfragen

Code: Alles auswählen

Event = WaitWindowEvent() 
    If Event=#PB_Event_Gadget 
      Select EventGadget() 
        Case #Gadget_0
          If EventType() = #PB_EventType_LeftClick
            Eintrag=GetGadgetState(#Gadget_0) 
            If Eintrag=0 
             SetGadgetText(#Gadget_1, "Login") 
            ElseIf Eintrag=1 
             SetGadgetText(#Gadget_1, "Logoff") 
           EndIf
         EndIf
      EndSelect 
    EndIf 
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
lite
Beiträge: 122
Registriert: 27.08.2012 21:08

Re: TreeViewItem und Event

Beitrag von lite »

Danke für deine Antwort.
Nur ist dein Snippet das gleiche wie in dem Beispielcode.
Das Problem ist immer noch da. :cry:

Lite
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: TreeViewItem und Event

Beitrag von mk-soft »

Nicht ganz...

Code: Alles auswählen

If EventType() = #PB_EventType_LeftClick
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
lite
Beiträge: 122
Registriert: 27.08.2012 21:08

Re: TreeViewItem und Event

Beitrag von lite »

Ja, auch wen ich dein Code nehme. Ist das Problem noch da.
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: TreeViewItem und Event

Beitrag von mk-soft »

Erkannt...

Habe gerade meine VM mit Windows gestartet.
Mal schauen was man machen kann
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: TreeViewItem und Event

Beitrag von Kiffi »

sieht so aus, als ob in einem TreeGadget per default der erste Eintrag selektiert ist.

Das sieht man nur nicht, wenn das TreeGadget nicht den Fokus hat (in Zusammenhang mit dem Flag #PB_Tree_AlwaysShowSelection).

Dieses Verhalten kannst Du ändern, indem Du nach Erstellen (und Befüllen) des TreeGadgets die Selektion aufhebst:

Code: Alles auswählen

SetGadgetState(#Gadget_0, -1)
Grüße ... Peter
a²+b²=mc²
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: TreeViewItem und Event

Beitrag von mk-soft »

Geht mit "SetGadgetState(#Gadget_0, -1)" auch nicht.
Scheint eine Macke von den Window control zu sein. Ist bei Mac OS nicht so...

Eventuell als erstes ein Dummy Eintrag erstellen.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Omi
Beiträge: 143
Registriert: 25.03.2013 09:59

Re: TreeViewItem und Event

Beitrag von Omi »

Hallo lite.

Dein Gedanke durch Klick in den leeren TreeGadget-Bereich zu klicken, um Items zu deaktivieren kann so eh nicht funktionieren, da es bei komplett mit Items gefüllten Bereich keinen leeren Platz mehr gäbe um zu klicken.

Die Items sind im 'Browse'-Modus, d.h. es ist immer eines oder mehrere (Multiselekt) selektiert.
Bei Linux könnte man per API auf den 'Single'-Mode umstellen um Items per [Strg][Klick] diese zu deaktivieren ...
http://www.chabba.de/Linux/ListIconGadg ... ionMode.pb
Zu den anderen Systemen kann ich leider nix sagen. Vielleicht kennt RSBasic ein Pendant für Windows.

Gruß, Charly
PureBasic Linux-API-Library: http://www.chabba.de
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: TreeViewItem und Event

Beitrag von Kiffi »

mk-soft hat geschrieben:Geht mit "SetGadgetState(#Gadget_0, -1)" auch nicht.
ja, da hast Du (leider) recht. Sobald das TreeGadget den Fokus erneut erhält, wird das Event wieder ausgelöst.

Grüße ... Peter
a²+b²=mc²
Antworten