Gewählten Eintrag bei Multiselect-ListIcon ermitteln? *OK*

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Regenduft
Beiträge: 574
Registriert: 25.03.2008 15:07
Wohnort: THE LÄÄÄND!

Gewählten Eintrag bei Multiselect-ListIcon ermitteln? *OK*

Beitrag von Regenduft »

n'Abend,

Trotz des Risikos etliche Augenroller zu erhalten:

Wie kann ich eigentlich ermitteln, welcher Eintrag bei einem ListIcon-Gadget aktuell ausgewählt wurde (also die Flanke sozusagen), wenn das MultiSelect-Flag gesetzt ist? :?

Bei folgendem Beispielcode habe ich das Problem, dass (wie in der Doku beschrieben) die Nummer des ersten Items rückgegeben wird. Ich hätte aber gerne die Nummer des gerade ausgewählten Eintrags...
(falls ich mich unverständlich ausgedrückt habe: Strg halten, wild rumklicken und Debugger-Ausgabe beobachten :wink:)

Code: Alles auswählen

If OpenWindow(0,50,50,200,200,"Multiselect-ListIcon",#PB_Window_SystemMenu)
  ListIconGadget(0,0,0,200,200,"Einträge",200,#PB_ListIcon_MultiSelect)
  For i = 0 To 10
    AddGadgetItem(0, -1, "Nummer "+Str(i))
  Next i
  Repeat
    Select WaitWindowEvent()
    Case #PB_Event_CloseWindow : Break

    ; === KERNPROBLEM ===
    Case #PB_Event_Gadget
      If EventType() = #PB_EventType_Change
        Debug GetGadgetState(0)
      EndIf
    ; === KERNPROBLEM ===

    EndSelect
  ForEver
EndIf
End
Was könnte ich statt GetGadgetState(0) verwenden?
Übersehe ich mal wieder etwas absolut offensichtliches?
Antwort bitte wieder min. in Fontsize 24 und rot! :wink:
Zuletzt geändert von Regenduft am 20.11.2008 15:19, insgesamt 1-mal geändert.
PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Code: Alles auswählen

OpenWindow(0,0,0,320,300,"void",#PB_Window_SystemMenu | 1)
ListIconGadget(0,0,0,320,300,"Name",200,#PB_ListIcon_MultiSelect)
  
For i=1 To 30 : AddGadgetItem(0,-1,"List-View Item #" + Str(i)) : Next
  
Repeat
	EventID = WaitWindowEvent()
	
	If EventID = #PB_Event_Gadget And EventGadget() = 0
		Debug SendMessage_(GadgetID(0),#LVM_GETSELECTIONMARK,0,0)
	EndIf
Until EventID = #PB_Event_CloseWindow
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
Regenduft
Beiträge: 574
Registriert: 25.03.2008 15:07
Wohnort: THE LÄÄÄND!

Beitrag von Regenduft »

Thx Fuid Byte! Auf Dich ist Verlass! :allright:

Mich wundert's aber, dass es da nur 'ne API-Lösung gibt. :?
PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Mich wundert's aber, dass es da nur 'ne API-Lösung gibt.
Mich ehrlich gesagt auch aber GetGadgetState() weigert sich und eine andere Methode ist mir nicht bekannt. Vielleicht mal auf die "Wunschliste" setzten falls es noch nicht geschehen sein sollte.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Andesdaf
Moderator
Beiträge: 2671
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

Fluid Byte hat geschrieben:Mich ehrlich gesagt auch aber GetGadgetState() weigert sich und eine andere Methode ist mir nicht bekannt. Vielleicht mal auf die "Wunschliste" setzten falls es noch nicht geschehen sein sollte.

Wieso weigert sich GetGadgetState? Bei mir geht das einwandfrei.

Code: Alles auswählen

Debug GetGadgetState(0)
liefert das selbe Ergebnis wie die Funktion der API.
Win11 x64 | PB 6.20
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Lass das Beispiel aus seinem ersten Post mal laufen und wähle mit gedrückter Control-Taste Item 0, 2 und 4. Wenn da was anderes als Null steht wäre ich stark überrascht ...
Windows 10 Pro, 64-Bit / Outtakes | Derek
Andesdaf
Moderator
Beiträge: 2671
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

Hach Dummheit :oops: ... Ja, du hattest Recht, ich hab vergessen, den
Multiselect auszuführen und dann mal wieder überschnell geantwortet :roll:
Jetzt zeigt er natürlich nur null an. Is ja klar...
Win11 x64 | PB 6.20
bec
Beiträge: 13
Registriert: 01.03.2007 23:00

Beitrag von bec »

Code: Alles auswählen

If OpenWindow(0,50,50,200,200,"Multiselect-ListIcon",#PB_Window_SystemMenu)
  CreateGadgetList(WindowID(0))
  ListIconGadget(0,0,0,200,200,"Einträge",200,#PB_ListIcon_MultiSelect)
  For i = 0 To 10
    AddGadgetItem(0, -1, "Nummer "+Str(i))
  Next i
  Repeat
    Select WaitWindowEvent()
    Case #PB_Event_CloseWindow 
      Break
    Case #PB_Event_Gadget
      Select EventGadget()
      Case 0 
        Select EventType()
        Case #PB_EventType_LeftClick
          For i = 0 To CountGadgetItems(0)
            If GetGadgetItemState(0, i) = #PB_ListIcon_Selected
               Debug i
            EndIf   
          Next
        EndSelect
      EndSelect        
    EndSelect
  ForEver
EndIf
End
Wenn man es so macht bekommt man die Liste der gerade ausgewählten Einträge.
Wenn man die mit einer Liste des vorherigen Klicks vergleicht bekommt man den aktuell gewählten Eintrag.
Vielleicht nützlich für Nicht-Windows-Programmierer. :wink:

bec
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Es gibt alle Einträge zurückt die ausgewählt sind und ist somit nicht brauchbar wenn man direkt reagieren will. Es funktioniert außerdem nur in eine Richtung. So oder so kommt man um API nicht rum.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Antworten