Seite 1 von 2

TreeViewItem und Event

Verfasst: 22.01.2016 14:08
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

Re: TreeViewItem und Event

Verfasst: 22.01.2016 14:37
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 

Re: TreeViewItem und Event

Verfasst: 22.01.2016 15:24
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

Re: TreeViewItem und Event

Verfasst: 22.01.2016 15:45
von mk-soft
Nicht ganz...

Code: Alles auswählen

If EventType() = #PB_EventType_LeftClick

Re: TreeViewItem und Event

Verfasst: 22.01.2016 15:50
von lite
Ja, auch wen ich dein Code nehme. Ist das Problem noch da.

Re: TreeViewItem und Event

Verfasst: 22.01.2016 15:57
von mk-soft
Erkannt...

Habe gerade meine VM mit Windows gestartet.
Mal schauen was man machen kann

Re: TreeViewItem und Event

Verfasst: 22.01.2016 16:05
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

Re: TreeViewItem und Event

Verfasst: 22.01.2016 16:15
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.

Re: TreeViewItem und Event

Verfasst: 22.01.2016 16:26
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

Re: TreeViewItem und Event

Verfasst: 22.01.2016 16:30
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