ListIconGadget - Letztes ausgewähltes Item
- Ghosty1967
- Beiträge: 205
- Registriert: 29.08.2005 13:56
- Computerausstattung: Intel i7, 128GB Ram, Win10 Ultimate, PB6.00 Alpha 3
- Wohnort: Köln
ListIconGadget - Letztes ausgewähltes Item
Hallo zusammen...
Ich muss in einem Programm folgende Angaben aus dem ListIconGadget haben
1. Die Position des ersten selektierten Eintrags, den bekomme ich mit dem GetGadgetItemState(Gadget) Befehl
2. Die Anzahl aller selektierten Einträge hole ich mir mit dem API Befehl SendMessage_(GadgetID(id), #LVM_GETSELECTEDCOUNT, 0, 0)
3. Die Position des letzten selektierten Eintrags...
Hier könnte ich ja das ListIconGadget von unten nach oben durchgehen und beim ersten selektierten Eintrag aus der Schleife springen, daß
erscheint mir aber doch ziemlich unkomfortabel und falls machbar würde ich auch hier einen API-Befehl bevorzugen.
Gibt es einen API-Befehl, der mir die Nummer des letztem selektierten Eintrags eines ListIconGadget zurückgibt?
Danke schon mal für den Schupser...
Ich muss in einem Programm folgende Angaben aus dem ListIconGadget haben
1. Die Position des ersten selektierten Eintrags, den bekomme ich mit dem GetGadgetItemState(Gadget) Befehl
2. Die Anzahl aller selektierten Einträge hole ich mir mit dem API Befehl SendMessage_(GadgetID(id), #LVM_GETSELECTEDCOUNT, 0, 0)
3. Die Position des letzten selektierten Eintrags...
Hier könnte ich ja das ListIconGadget von unten nach oben durchgehen und beim ersten selektierten Eintrag aus der Schleife springen, daß
erscheint mir aber doch ziemlich unkomfortabel und falls machbar würde ich auch hier einen API-Befehl bevorzugen.
Gibt es einen API-Befehl, der mir die Nummer des letztem selektierten Eintrags eines ListIconGadget zurückgibt?
Danke schon mal für den Schupser...
Re: ListIconGadget - Letztes ausgewähltes Item
Moin Ghosty1967,
in der MSDN habe ich auf die Schnelle mit #LVM_GETSELECTIONMARK die Möglichkeit den ersten selektierten Eintrag zu finden gefunden.
Apropo MSDN: Ich suche immer mit MSDN <suchwort> im www.
Ansonsten sind diese beiden Links hilfreich:
https://docs.microsoft.com/en-us/previo ... dfrom=MSDN
https://docs.microsoft.com/en-us/previo ... dfrom=MSDN
Da das wahrscheinlich nicht wirklich hilft, hier wenigstens die von Dir angesprochene Variante in PB-code (ungetestet).
in der MSDN habe ich auf die Schnelle mit #LVM_GETSELECTIONMARK die Möglichkeit den ersten selektierten Eintrag zu finden gefunden.
Apropo MSDN: Ich suche immer mit MSDN <suchwort> im www.
Ansonsten sind diese beiden Links hilfreich:
https://docs.microsoft.com/en-us/previo ... dfrom=MSDN
https://docs.microsoft.com/en-us/previo ... dfrom=MSDN
Da das wahrscheinlich nicht wirklich hilft, hier wenigstens die von Dir angesprochene Variante in PB-code (ungetestet).
Code: Alles auswählen
Procedure.i GetGadgetLastSelectedItemIndex(GadID) ;' returns Index of last selected Item with the ListIconGadget()
Protected result, nn
result = -1 ;' no selection
For nn = CountGadgetItems(GadID) - 1 To 0 Step -1
If GetGadgetItemState(GadID, nn) & #PB_ListIcon_Selected
result = nn
Break ;' save little time :-)
EndIf
Next nn :Debug #PB_Compiler_Procedure+"() -- result = "+result
ProcedureReturn result
EndProcedure
Mostly running PureBasic <latest stable version and current alpha/beta> (x64) on Windows 11 Home
- Ghosty1967
- Beiträge: 205
- Registriert: 29.08.2005 13:56
- Computerausstattung: Intel i7, 128GB Ram, Win10 Ultimate, PB6.00 Alpha 3
- Wohnort: Köln
Re: ListIconGadget - Letztes ausgewähltes Item
Hallo Axolotl..
Danke dir für deine Antwort. Ich glaube, ob ich #LVM_GETSELECTIONMARK nutze oder das mit GetGadgetState() mache ist funktional "relativ" egal. Was die Suche in MSDN angeht, mache ich eigentlich immer genauso, aber es wunderte mich, dass es anscheinend keinen entsprechenden Eintrag in der MSDN zum letzten ausgewählten index in einem Listicon gibt...
Meine Lösung ist auch hier ähnlich deiner
Alles sehr ähnlich - aber kann es wirklich sein, dass in der API daran nicht gedacht wurde?!
Danke dir für deine Antwort. Ich glaube, ob ich #LVM_GETSELECTIONMARK nutze oder das mit GetGadgetState() mache ist funktional "relativ" egal. Was die Suche in MSDN angeht, mache ich eigentlich immer genauso, aber es wunderte mich, dass es anscheinend keinen entsprechenden Eintrag in der MSDN zum letzten ausgewählten index in einem Listicon gibt...
Meine Lösung ist auch hier ähnlich deiner
Code: Alles auswählen
Procedure GetLastIndex(Gadget)
Protected idx
For idx = CountGadgetItems(Gadget) - 1 To 0 Step - 1
If GetGadgetItemState(Gadget, idx) & #PB_ListIcon_Selected
ProcedureReturn idx
EndIf
Next idx
ProcedureReturn -1
EndProcedure
- hjbremer
- Beiträge: 822
- Registriert: 27.02.2006 22:30
- Computerausstattung: von gestern
- Wohnort: Neumünster
Re: ListIconGadget - Letztes ausgewähltes Item
Mickelsoft for ever
es werden nur die selektierten Einträge abgefragt
Code: Alles auswählen
Procedure.i LvGetLastSelected(id)
Protected anz = SendMessage_(id, #LVM_GETSELECTEDCOUNT, 0, 0) ;Anzahl selektiert
Protected j, n = -1
If anz
For j = 1 To anz
n = SendMessage_(id, #LVM_GETNEXTITEM, n, #LVNI_SELECTED) : Debug "selected " + n
Next
EndIf
ProcedureReturn n
EndProcedure
;oder in ein Array
Procedure.i LvGetSelected(id, Array liste(1))
Protected anz = SendMessage_(id, #LVM_GETSELECTEDCOUNT, 0, 0) ;Anzahl selektiert
Protected j, n = -1
Dim liste(anz) ;hier kommen die Zeilennummern hinein
liste(0) = anz
If anz
For j = 1 To anz
n = SendMessage_(id, #LVM_GETNEXTITEM, n, #LVNI_SELECTED)
liste(j) = n
Next
EndIf
ProcedureReturn anz
EndProcedure
OpenWindow(0, 0, 0, 640, 450, "ListIconGadgets", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListIconGadget(0, 10, 25, 380, 390, "Column 1", 100, #PB_ListIcon_MultiSelect|#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
ButtonGadget(1, 10, 420, 80, 25, "last")
ButtonGadget(2, 110, 420, 80, 25, "Array")
For j = 2 To 4 ;weitere Spalten
AddGadgetColumn(0, j, "Column " + Str(j), 80)
Next
For j = 0 To 24
t$ = ~"Literale\nZeile\n"+Str(j)
AddGadgetItem(0, j, t$)
Next
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case 1 : row = LvGetLastSelected(GadgetID(0))
Debug "last selected " + row
Case 2
Dim rownr(0)
anz = LvGetSelected(GadgetID(0), rownr())
For j = 1 To anz
Debug rownr(j)
Next
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
Purebasic 5.70 x86 5.72 X 64 - Windows 10
Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Re: ListIconGadget - Letztes ausgewähltes Item
Tja.... und da soll einer sagen PB wäre aufwendig ...
Die API Version ist für das geübte Auge genau das gleiche (Abfolge und Aufrufe) wie die Version von Ghosty
Die API Version ist für das geübte Auge genau das gleiche (Abfolge und Aufrufe) wie die Version von Ghosty
PureBasic 6.10 LTS (Windows x86/x64) | Windows10 Pro x64 | Asus TUF X570 Gaming Plus | R9 5900X | 64GB RAM | GeForce RTX 3080 TI iChill X4 | HAF XF Evo | build by vannicom
- Ghosty1967
- Beiträge: 205
- Registriert: 29.08.2005 13:56
- Computerausstattung: Intel i7, 128GB Ram, Win10 Ultimate, PB6.00 Alpha 3
- Wohnort: Köln
Re: ListIconGadget - Letztes ausgewähltes Item
Sehe ich auch so, deswegen bleibe ich einfach bei meiner Version, fallsl nicht noch einer eine geniale Idee hat...
- hjbremer
- Beiträge: 822
- Registriert: 27.02.2006 22:30
- Computerausstattung: von gestern
- Wohnort: Neumünster
Re: ListIconGadget - Letztes ausgewähltes Item
Es ist nicht gleich.
In der PB Version werden im Extremfall alle Listeneinträge in der Schleife durchsucht. ( CountGadgetItems(Gadget) )
In der Api Version nur die selektierten Einträge ( LVM_GETSELECTEDCOUNT )
Die For Next Schleife ist also in der Regel erheblich kleiner
Ob dies auffällt, ist aber natürlich abhängig von der Anzahl der Items
Purebasic 5.70 x86 5.72 X 64 - Windows 10
Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Re: ListIconGadget - Letztes ausgewähltes Item
Ich wollte mal in den Raum werfen, das die Fragestellung vermutlich eine falsche Annahme zugrunde legt: Haltet mal die STRG-Taste und klickt in die Liste: die Ausgewählten Einträge müssen nicht in Reihe sein!
Das zuletzt markierte Item muss dementsprechend auch nicht an Anfang oder Ende sein, es kann mittendrin sein.
ungetestet: Laut https://stackoverflow.com/questions/290 ... m-listview
könnte sowas funktionieren (ungetestet): (edit: in prinzip das gleiche, was hjbremer macht)
Wenn man nur in PB bleiben will, muss man immer alle scannen.
Das zuletzt markierte Item muss dementsprechend auch nicht an Anfang oder Ende sein, es kann mittendrin sein.
ungetestet: Laut https://stackoverflow.com/questions/290 ... m-listview
könnte sowas funktionieren (ungetestet): (edit: in prinzip das gleiche, was hjbremer macht)
Code: Alles auswählen
itemInt = -1
repeat
itemInt = SendMessage_(GadgetId(<gadget>), #LVM_GETNEXTITEM, itemInt , #LVNI_SELECTED)
if itemint = - 1 : break : endif
; was machen
forever
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
- Ghosty1967
- Beiträge: 205
- Registriert: 29.08.2005 13:56
- Computerausstattung: Intel i7, 128GB Ram, Win10 Ultimate, PB6.00 Alpha 3
- Wohnort: Köln
Re: ListIconGadget - Letztes ausgewähltes Item
In meinem Fall geht es wirklich nur darum, den Index des letzten ausgewählten Items in der Liste zu ermitteln und nicht nach der Reihenfolge der AuswahlGPI hat geschrieben: ↑22.06.2021 18:45 Ich wollte mal in den Raum werfen, das die Fragestellung vermutlich eine falsche Annahme zugrunde legt: Haltet mal die STRG-Taste und klickt in die Liste: die Ausgewählten Einträge müssen nicht in Reihe sein!
Das zuletzt markierte Item muss dementsprechend auch nicht an Anfang oder Ende sein, es kann mittendrin sein.
Re: ListIconGadget - Letztes ausgewähltes Item
Du verstehst mich gerade falsch: Ich kann ohne Probleme den 1, den 3 und den 5ten Eintrag auswählen. Ich hab dann 3 ausgewählt. Wenn deine Routine aber alle Einträge zwischen 1 und 5 nimmt, sinds halt 5 Einträge.
Und GetGadgetState gibt dir den letzten selektierten aus (wenn ich mich nicht ganz täusche), wenn ich also 1,5,3 in der Reihenfolge mit Strg auswähle, dann bekommst du 3 zurück. Wenn du jetzt den letzten holst (5) und das als auswahl hernimmst, hast du 3,4,5 die du weiterverarbeitest.
Freu dich auf lustige Bugreports deiner Benutzer
Und GetGadgetState gibt dir den letzten selektierten aus (wenn ich mich nicht ganz täusche), wenn ich also 1,5,3 in der Reihenfolge mit Strg auswähle, dann bekommst du 3 zurück. Wenn du jetzt den letzten holst (5) und das als auswahl hernimmst, hast du 3,4,5 die du weiterverarbeitest.
Freu dich auf lustige Bugreports deiner Benutzer
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!