ListIconGadget Reihenfolge auslesen
ListIconGadget Reihenfolge auslesen
Hallo,
ich verwende ListIconGadget mit dem Flag #PB_ListIcon_HeaderDragDrop
Frage:
Wie kann ich die Reihenfolge der Spalten Auslesen ?
Vielen Dank schon mal im Voraus
ich verwende ListIconGadget mit dem Flag #PB_ListIcon_HeaderDragDrop
Frage:
Wie kann ich die Reihenfolge der Spalten Auslesen ?
Vielen Dank schon mal im Voraus
Win-10, PB 5.31 (Windows - x86)
Re: ListIconGadget Reihenfolge auslesen
Ich habe folgendes in meinem Code-Archiv gefunden:
...Im Array ColumnOrder() steht dann die Reihenfolge. Die Procedure müsstest du also eventuell noch deinen Bedürfnissen anpassen.
Code: Alles auswählen
; Retrieves order/position of specified list column 'Index'.
; @param ColumnCount - Number of columns, '0' to try retrieving it automatically
; @return Position, '-1' if an error occurred
Procedure ListColumnIndexOrderGet(GadgetNr, Index, ColumnCount=0)
Protected HeaderID
Protected Column
Protected Result = -1
HeaderID = SendMessage_(GadgetID(GadgetNr), #LVM_GETHEADER, 0, 0)
If ColumnCount < 1
ColumnCount = SendMessage_(HeaderID, #LVM_GETITEMCOUNT, 0, 0)
If ColumnCount < 1 : ProcedureReturn Result : EndIf
EndIf
Dim ColumnOrder(ColumnCount - 1)
If SendMessage_(HeaderID, #HDM_GETORDERARRAY, ColumnCount, @ColumnOrder())
For Column = 0 To ColumnCount - 1
If Index = ColumnOrder(Column)
Result = Column
Break
EndIf
Next
EndIf
ProcedureReturn Result
EndProcedure
Zuletzt geändert von c4s am 28.01.2015 22:20, insgesamt 1-mal geändert.
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Re: ListIconGadget Reihenfolge auslesen
ich hätte spontan geschrieben "mit GetGadgetItemText()".
Allerdings wird hierbei die Reihenfolge ignoriert. Ein Bug?
Grüße ... Peter
Allerdings wird hierbei die Reihenfolge ignoriert. Ein Bug?
Code: Alles auswählen
OpenWindow(0, 10, 10, 400, 400, "")
ListIconGadget(0, 10, 10, 300, 300, "col1", 100, #PB_ListIcon_HeaderDragDrop)
AddGadgetColumn(0, 1, "col2", 100)
Repeat
Until WaitWindowEvent()=#PB_Event_CloseWindow
Debug GetGadgetItemText(0, -1, 0)
Debug GetGadgetItemText(0, -1, 1)
a²+b²=mc²
Re: ListIconGadget Reihenfolge auslesen
Wenn es darum geht, deine Daten in den einzelnen Spalten hinzuzufügen, ist es egal. PB merkt sich das:
Wenn du einige Spalten verschiebst und anschließend einen weiteren Datensatz hinzufügst, werden die neuen Daten ebenfalls in der ursprünglichen Reihenfolge angezeigt.
Oder gibt es einen anderen Grund, warum du die Reihenfolge auslesen möchtest? Oder möchtest du die Reihenfolge der Spalten als Einstellung speichern, damit der Benutzer die Spalten nicht erneut verschieben muss?
Code: Alles auswählen
EnableExplicit
If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListIconGadget(1, 0, 0, WindowWidth(0), WindowHeight(0)-40, "Spalte 1", 100, #PB_ListIcon_HeaderDragDrop)
AddGadgetColumn(1, 1, "Spalte 2", 100)
AddGadgetColumn(1, 2, "Spalte 3", 100)
AddGadgetColumn(1, 3, "Spalte 4", 100)
ButtonGadget(2, WindowWidth(0)-110, WindowHeight(0)-30, 100, 20, "Hinzufügen", 0)
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case 2
AddGadgetItem(1, -1, "Text 1" + Chr(10) + "Text 2" + Chr(10) + "Text 3" + Chr(10) + "Text 4", 0, 0)
EndSelect
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
EndIf
Oder gibt es einen anderen Grund, warum du die Reihenfolge auslesen möchtest? Oder möchtest du die Reihenfolge der Spalten als Einstellung speichern, damit der Benutzer die Spalten nicht erneut verschieben muss?
Re: ListIconGadget Reihenfolge auslesen
@Kifi
@c4s
Mit deine Code bekomme ich immer -1 zurück
@RSBasic
Gruß
MarcelX
die Reihefolge ist immer gleich.ich hätte spontan geschrieben "mit GetGadgetItemText()"
@c4s
Mit deine Code bekomme ich immer -1 zurück
@RSBasic
Ja, genau dasOder möchtest du die Reihenfolge der Spalten als Einstellung speichern, damit der Benutzer die Spalten nicht erneut verschieben muss?
Gruß
MarcelX
Win-10, PB 5.31 (Windows - x86)
Re: ListIconGadget Reihenfolge auslesen
Dafür gibt es #LVM_GETCOLUMNORDERARRAY und #LVM_SETCOLUMNORDERARRAY.
Diese beiden Windows Messages kannst du mit SendMessage_() sowohl die Reihenfolge der Spalten ermitteln als auch setzen.
Beispielcode:
Wenn du die Reihenfolge gespeichert hast, kannst du diese auch jederzeit wiederherstellen:
Diese beiden Windows Messages kannst du mit SendMessage_() sowohl die Reihenfolge der Spalten ermitteln als auch setzen.
Beispielcode:
Code: Alles auswählen
EnableExplicit
Define a
Define LV_ColumnTotal
If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListIconGadget(1, 0, 0, WindowWidth(0), WindowHeight(0)-40, "Spalte 1", 100, #PB_ListIcon_HeaderDragDrop)
AddGadgetColumn(1, 1, "Spalte 2", 100)
AddGadgetColumn(1, 2, "Spalte 3", 100)
AddGadgetColumn(1, 3, "Spalte 4", 100)
ButtonGadget(2, WindowWidth(0)-210, WindowHeight(0)-30, 200, 20, "Spaltenreihenfolge ermitteln", 0)
LV_ColumnTotal = SendMessage_(SendMessage_(GadgetID(1), #LVM_GETHEADER, 0, 0), #HDM_GETITEMCOUNT, 0, 0)
Dim LV_Columns(LV_ColumnTotal-1)
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case 2
SendMessage_(GadgetID(1), #LVM_GETCOLUMNORDERARRAY, LV_ColumnTotal, LV_Columns())
For a = 1 To LV_ColumnTotal
Debug GetGadgetItemText(1, -1, LV_Columns(a-1))
Next
Debug "--------------------------------------------------"
EndSelect
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
EndIf
Code: Alles auswählen
EnableExplicit
Define LV_ColumnTotal
If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListIconGadget(1, 0, 0, WindowWidth(0), WindowHeight(0)-40, "Spalte 1", 100, #PB_ListIcon_HeaderDragDrop)
AddGadgetColumn(1, 1, "Spalte 2", 100)
AddGadgetColumn(1, 2, "Spalte 3", 100)
AddGadgetColumn(1, 3, "Spalte 4", 100)
ButtonGadget(2, WindowWidth(0)-210, WindowHeight(0)-30, 200, 20, "Spaltenreihenfolge wiederherstellen", 0)
LV_ColumnTotal = SendMessage_(SendMessage_(GadgetID(1), #LVM_GETHEADER, 0, 0), #HDM_GETITEMCOUNT, 0, 0)
Dim LV_Columns(LV_ColumnTotal-1)
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case 2
LV_Columns(0) = 3
LV_Columns(1) = 2
LV_Columns(2) = 1
LV_Columns(3) = 0
SendMessage_(GadgetID(1), #LVM_SETCOLUMNORDERARRAY, LV_ColumnTotal, LV_Columns())
EndSelect
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
EndIf
Re: ListIconGadget Reihenfolge auslesen
Danke, genau Das brauche ich.
Wenn ich dabei bin, ich möchte die Breite der Colomn bestimmen, mit
bekomme ich die Breite, allerding nicht die die ich mit ziehen geändert habe, sondern welche ich mit AddGadgetColumn() festgelegt habe.
Wenn ich dabei bin, ich möchte die Breite der Colomn bestimmen, mit
Code: Alles auswählen
GetGadgetItemAttribute(0, #PB_Ignore, #PB_ListIcon_ColumnWidth, 1)
Win-10, PB 5.31 (Windows - x86)
Re: ListIconGadget Reihenfolge auslesen
Kann ich nicht bestätigen. Ermittelst du vielleicht die falsche Spalte? Die Spaltennummer fängt immer mit 0 für die erste Spalte an.
Wenn ich dein Code ausführe und ich verändere die Breite der zweiten Spalte, dann erhalte ich auch die von mir geänderte Breite.
Oder möchtest du die Breite der zweiten Spalte, die vorher in einer anderen Position war, ermitteln? Dann musst du das Array mit berücksichtigen.
Wenn ich dein Code ausführe und ich verändere die Breite der zweiten Spalte, dann erhalte ich auch die von mir geänderte Breite.
Oder möchtest du die Breite der zweiten Spalte, die vorher in einer anderen Position war, ermitteln? Dann musst du das Array mit berücksichtigen.
Re: ListIconGadget Reihenfolge auslesen
ok, ich hatte die falsche Spaltennummer verwendet
Win-10, PB 5.31 (Windows - x86)