was ist hier falsch? (ListIconGadget mit Checkboxen)

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
SirCus
Beiträge: 182
Registriert: 10.09.2004 11:44
Wohnort: München
Kontaktdaten:

was ist hier falsch? (ListIconGadget mit Checkboxen)

Beitrag von SirCus »

soo eine knobelaufgabe zum feierabend.. ich komm nich drauf:

ich habe zwei ListIconGadgets
alle Einträge aus dem ersten Gadget "#ListALRech"welche per Checkbox abgehakt sind, sollen per Knopfdruck ins zweite "#ListKRneuPos" übernommen werden:

Code: Alles auswählen

ALRech=CountGadgetItems(#ListALRech)
  For x=0 To ALRech-1
    If GetGadgetItemState(#ListALRech,x)=#PB_ListIcon_Checked Or (GetGadgetItemState(#ListALRech,x) = #PB_ListIcon_Checked And GetGadgetItemState(#ListALRech,x) =#PB_ListIcon_Selected)
      AddGadgetItem(#ListKRneuPos, -1,Str(x+1)+Chr(10)+GetGadgetItemText(#ListALRech,x,1)+Chr(10)+GetGadgetItemText(#ListALRech,x,2)+Chr(10)+GetGadgetItemText(#ListALRech,x,3))
    EndIf
    
  Next
das funktioniert aber nur teilweise...
ihr werdet die komische if bedingung bemerkt haben:
GetGadgetItemState(#ListALRech,x) liefert entweder #PB_ListIcon_Checked oder #PB_ListIcon_Selected zurück.

ist also zufällig die "gecheckte" Zeile auch noch Markiert hab ich Pech gehabt, dann wird sie nich übernommen.
Deshalb hab ich noch diese "AND" verknüpfung zusätzlich eingebaut, aber auch die funkioniert nicht.

Es sollen NUR die gecheckten einträge Übernommen werden, aber AUCH wenn sie markiert sind.. aber NICHT wenn sie zwar markiert aber nicht gecheckt sind... - im grunde soll PB einfach die Markierung ignorieren, tuts aber nicht.
2D Game H.E.R.A. (Entwicklung eingefroren)
www.chamaeleo-fx.de.vu

- mein Lieblingszitat
"die Informationsumwelt wird von einer fürchterlichen Menge an Unsinn und Lügen verschmutzt" (Stanislaw Lem, Lokaltermin, 1954 (!) )
http://www.stanislaw-lem.de/zitate/zitate.shtml
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Wie wäre es damit:

Code: Alles auswählen

If GetGadgetItemState(#ListALRech, x) & #PB_ListIcon_Checked
Schonmal das Beispiel aus der Hilfe angeschaut?
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

in etwa so?

Code: Alles auswählen

Enumeration
#Window_0
#ListIcon_0
#ListIcon_1
#Button_0
#Button_1
EndEnumeration

If OpenWindow(#Window_0,216,0,600,300, #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar,"oi fenschdr")
  If CreateGadgetList(WindowID())
    ListIconGadget(#ListIcon_0,180,60,110,130,"Column1",100,#PB_ListIcon_CheckBoxes)
    ListIconGadget(#ListIcon_1,310,60,130,130,"Column1",100)
    ButtonGadget(#Button_0,180,210,110,30,"Übernahme")
    ButtonGadget(#Button_1,310,210,130,30,"Löschen")
  EndIf
EndIf


AddGadgetItem(#ListIcon_0,-1,"Erwin")
AddGadgetItem(#ListIcon_0,-1,"Paul")
AddGadgetItem(#ListIcon_0,-1,"Fred")
AddGadgetItem(#ListIcon_0,-1,"Hans")
AddGadgetItem(#ListIcon_0,-1,"SirCus")

Repeat
  Event = WaitWindowEvent()
  If Event = #PB_EventGadget
    GadgetID = EventGadgetID()
    If GadgetID = #ListIcon_0
    ElseIf GadgetID = #ListIcon_1
    ElseIf GadgetID = #Button_0
      For I=0 To CountGadgetItems(#ListIcon_0)-1
        Debug Str(GetGadgetItemState(#ListIcon_0,I))+"  "+GetGadgetItemText(#ListIcon_0,I,0)
        If GetGadgetItemState(#ListIcon_0,I)=#PB_Listicon_checked Or GetGadgetItemState(#ListIcon_0,I)=#PB_Listicon_checked|#PB_Listicon_Selected
          AddGadgetItem(#ListIcon_1,-1,GetGadgetItemText(#ListIcon_0,I,0))
        EndIf
      Next I
    ElseIf GadgetID = #Button_1
      ClearGadgetItemList(#ListIcon_1)
    EndIf
    
  EndIf
Until Event = #PB_EventCloseWindow
End

‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
SirCus
Beiträge: 182
Registriert: 10.09.2004 11:44
Wohnort: München
Kontaktdaten:

Beitrag von SirCus »

NicTheQuick hat geschrieben:Wie wäre es damit:

Code: Alles auswählen

If GetGadgetItemState(#ListALRech, x) & #PB_ListIcon_Checked
Schonmal das Beispiel aus der Hilfe angeschaut?
jo so gehts, konnte aber mit dem & erst nichts anfangen.. & alleine sah komisch aus :)
2D Game H.E.R.A. (Entwicklung eingefroren)
www.chamaeleo-fx.de.vu

- mein Lieblingszitat
"die Informationsumwelt wird von einer fürchterlichen Menge an Unsinn und Lügen verschmutzt" (Stanislaw Lem, Lokaltermin, 1954 (!) )
http://www.stanislaw-lem.de/zitate/zitate.shtml
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Wenn man sehr viele Eintraege in der Liste hat ist so eine for schleife
aber nicht optimal .

Code: Alles auswählen

repeat 
a = sendmessage(gadgetid(id),#LVM_GETNEXTITEM,a,#LVNI_SELECTED)
until a = -1
edit : argh , falscher thread ... :-(
Antworten