Ich habe hier einen Fehler in der Pure Basic Hilfedatei (alle Sprachen) gefunden.
Ich kann es leider nicht in den anderen Sprachen veröffentlichen, da ich nur Deutsch und PureBasic kann.
Im Kapitel GetGadgetItemState (PB 4.60 Windows) steht:
Beispiel
letzter Absatz
Code: Alles auswählen
If GetGadgetItemState(#Listicon, n) & #PB_ListIcon_Checked | #PB_ListIcon_Selected
; Eintrag n ist abgehakt ODER ausgewählt ODER beides
EndIf
Die Abfrage reagiert jedoch auch, wenn kein Eintrag abgehakt ODER ausgewählt ist.
Das liegt daran, dass der Prioritäts-Level der Operatoren "&" und "|" gleich ist.
Die Konstanten "#PB_ListIcon_Checked | #PB_ListIcon_Selected" müssen in Klammern gesetzt werden.
Im vorletzten Absatz müssen die Konstanten jedoch nicht in Klammern gesetzt werden,
da der Prioritäts-Level des Operators "=" kleiner ist als der des Operators "|".
Mein Vorschlag ist, die erste Zeile des letzten Absatzes so zu ändern:
Code: Alles auswählen
If GetGadgetItemState(#Listicon, n) & (#PB_ListIcon_Checked | #PB_ListIcon_Selected)
Hier ein kleines Beispiel zum Testen.
Code: Alles auswählen
Enumeration
#Listicon
EndEnumeration
If OpenWindow(0, 0, 0, 440, 200, "ListIconGadgets", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListIconGadget(#Listicon, 10, 10, 420, 180, "Column 1", 100, #PB_ListIcon_CheckBoxes | #PB_ListIcon_MultiSelect) ; ListIcon mit Mehrfachselektion
For b = 2 To 4
AddGadgetColumn(#Listicon, b, "Column " + Str(b), 100)
Next
For b = 0 To 4
AddGadgetItem(#Listicon, b, "Item 1"+Chr(10)+"Item 2"+Chr(10)+"Item 3"+Chr(10)+"Item 4")
Next
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget
If GadgetID = #ListIcon
ClearDebugOutput()
For n = 0 To 4
; ... hier ein Ausschnitt aus einer WaitWindowEvent() - Ereignisschleife:
If GetGadgetItemState(#Listicon, n) & #PB_ListIcon_Checked
; Eintrag n ist abgehakt (egal ob ausgewählt oder nicht)
Debug "Eintrag " + Str(n) + " ist abgehakt (egal ob ausgewählt oder nicht)"
Else
Debug ""
EndIf
If GetGadgetItemState(#Listicon, n) & #PB_ListIcon_Selected
; Eintrag n ist ausgewählt (egal ob abgehakt oder nicht)
Debug "Eintrag " + Str(n) + " ist ausgewählt (egal ob abgehakt oder nicht)"
Else
Debug ""
EndIf
If GetGadgetItemState(#Listicon, n) = #PB_ListIcon_Checked | #PB_ListIcon_Selected
; Eintrag n ist abgehakt UND ausgewählt
Debug "Eintrag " + Str(n) + " ist abgehakt UND ausgewählt"
Else
Debug " "
EndIf
If GetGadgetItemState(#Listicon, n) & #PB_ListIcon_Checked | #PB_ListIcon_Selected
; Eintrag n ist abgehakt ODER ausgewählt ODER beides
Debug "Eintrag " + Str(n) + " ist abgehakt ODER ausgewählt ODER beides"
EndIf
If GetGadgetItemState(#Listicon, n) & (#PB_ListIcon_Checked | #PB_ListIcon_Selected)
; Eintrag n ist abgehakt ODER ausgewählt ODER beides
Debug "Eintrag " + Str(n) + " ist wirklich abgehakt ODER ausgewählt ODER beides"
Else
Debug " "
EndIf
Debug "-------------------------"
Next n
EndIf
EndIf
Until Event = #PB_Event_CloseWindow
EndIf
__________________________________________________
Code-Tags hinzugefügt
09.01.2012
RSBasic