ListIconGadget -> letzter Eintrag wird vermißt

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
dl5ndh
Beiträge: 94
Registriert: 13.05.2008 19:55

ListIconGadget -> letzter Eintrag wird vermißt

Beitrag von dl5ndh »

Hallo,
ich verzweifel noch, habe ein ListIconGadget erstellt und schreibe bspw. genau 50 Einträge hinein mit mehreren Spalten.
Ich habe Kontrollkästchen, die man anklicken kann, um auf denjeweiligen Inhalt dieses Eintrags zugreifen zu können. Das geht in einer Schleife wunderbar, bis auf den letzten Eintrag, den findet die Abfrage nicht.
Meine Schleife sei hier mal dargestellt:

Code: Alles auswählen

For n = 0 To CountGadgetItems(#ListIcon_DXClusterInternet)-1                                         
                                                      state=GetGadgetItemState(#ListIcon_DXClusterInternet,n)
                                                      Select state
                                                            Case #PB_ListIcon_Checked
                                                                    
                                                                    DXI_CALL = GetGadgetItemText(#ListIcon_DXClusterInternet,n,0)
                                                                    ;DX CALL übernehmen
                                                                    stundeX$=StringField(GetGadgetItemText(#ListIcon_DXClusterInternet,n,3),1,":")
                                                                    minuteX$=StringField(GetGadgetItemText(#ListIcon_DXClusterInternet,n,3),2,":")
                                                                    frequencia$=StringField(GetGadgetItemText(#ListIcon_DXClusterInternet,n,2),1,".")                                                       
                                                                    ;call = DXI_CALL
                                                                    dxccDXI = StringField(GetGadgetItemText(#ListIcon_DXClusterInternet,n,1),1,".")
                                                                    notiz$ = StringField(GetGadgetItemText(#ListIcon_DXClusterInternet,n,4),1,".")

                                                                    UpdateWindow_(WindowID(#Window_0))
                                                                    
                                                                    nichts=0
                                                                    Break 2
                                                            
                           Default 
                                     nichts=1
                           EndSelect
                                                
   Next n
Wenn ich praktisch den letzten der 50 Einträge im Kontrollkästchen markiere, dann verzweigt das Programm erst gar nicht zu state=#PB_ListIcon_Checked. Weiß jemand, was für einen dummen Fehler ich da mache?
Gruß
Gerhard[/size][size=7[/size]][/size]
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: ListIconGadget -> letzter Eintrag wird vermißt

Beitrag von Kiffi »

ich wette, der letzte (fehlende) Eintrag ist selektiert, oder? ;-)

Code: Alles auswählen

state=GetGadgetItemState(#ListIcon_DXClusterInternet,n)
If state & #PB_ListIcon_Checked
 [...]
Grüße ... Kiffi

P.S.: Normalerweise muss man seine Postings nicht mit unterschiedlichen
Schriftgrößen formatieren...
a²+b²=mc²
Benutzeravatar
dl5ndh
Beiträge: 94
Registriert: 13.05.2008 19:55

Re: ListIconGadget -> letzter Eintrag wird vermißt

Beitrag von dl5ndh »

Kiffi hat geschrieben:ich wette, der letzte (fehlende) Eintrag ist selektiert, oder? ;-)

Code: Alles auswählen

state=GetGadgetItemState(#ListIcon_DXClusterInternet,n)
If state & #PB_ListIcon_Checked
 [...]
Grüße ... Kiffi

P.S.: Normalerweise muss man seine Postings nicht mit unterschiedlichen
Schriftgrößen formatieren...
Ahja, danke für die Schriftgrößenhinweise. Das war ja keine Absicht.

Ja, ich habe praktisch den letzten Eintrag im ListIconGadget selekiert, also das Kontrollkästchen angeklickt, beim vorletzten Klick gehts noch, da wird mir Eintrag 48 angezeigt, beim letzten Eintrag wird mir nichts angezeigt, als ob es diesen Eintrag nicht gibt.
Ach so, Du sagst, ich muß das mit dem & ListIcon_Checked verknüpfen?
Hmm, ich weiß nicht warum, aber ich probiere es und danke Dir für die Antwort, freue mich darüber!
Benutzeravatar
dl5ndh
Beiträge: 94
Registriert: 13.05.2008 19:55

Beitrag von dl5ndh »

Hallo Kiffi,
tausend Dank, ja ich habe es jetzt so abgeändert:

Code: Alles auswählen

Select state & #PB_ListIcon_Checked
Jetzt funktioniert das, puhhh Gott sei Dank.
Trotzdem verstehe ich den Sinn nicht ganz, aber jedenfalls geht es so ganz prima. DANKE
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

wei STATE eben nicht nur Checked ist, sondern die Kombination von Checked und Selected.

Hier siehst du, welche Bits in den Flags gesetzt sind:

Code: Alles auswählen

Debug RSet(Bin( #PB_ListIcon_Checked ), 16, "0")
Debug RSet(Bin( #PB_ListIcon_Selected ), 16, "0")
Debug "--------------------------------------"
Debug RSet(Bin( #PB_ListIcon_Checked | #PB_ListIcon_Selected ), 16, "0")
wenn du jetzt nur auf "Checked" prüfst, dann schließt du ganz geziehlt auch die aus, die Checked und Selected sind.

... oder in Dezimalzahlen:
Checked ist 2, Selected ist 1, also ist Checked und Selected 3.
wenn du prüfst "If State = Checked" dann nimmst du nur die, die 2 haben, die mit 3 läßt du weg.

mit dem & Checked (bitwise AND 2) von Kiffi vorgeschlagen, prüfst du nur,
ob das Bit mit dem Wert 2 gesetzt ist, die anderen läßt du außen vor.
damit ist es egal, ob die auch Selected sind, oder sonst was für andere Eigenschaften haben,
damit prüfst du nur auf Checked.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten