Seite 1 von 1
Listicon Gadget, Spalte bestimmen
Verfasst: 31.12.2005 20:09
von hawk009
Hallo!
Ich habe ein Problem mit dem Listicon Gadget bei aktiven #PB_ListIcon_HeaderDragDrop.
So wie ich es verstanden habe, ändert Windows zwar die visuelle Reihenfolge der Spalten wenn der User Spalten per Drag&Drop verschoben hat, nicht aber deren Index.
Wie komme ich nun an die richtige Spaltenreihenfolge?
Habe mir schon die Userlibaries PureLVSort un MorelisticonGadget angeschaut.
Deren Befehle gehen aber immer auf den Index.
Oder habe ich da etwas übersehen?
Bin für Hilfe dankbar.
Greetings
Ralf
Verfasst: 31.12.2005 21:34
von Batze
Hast du einen Beispielcode?
Dann helfen dir oft mehr Leute, als wenn sie selber einen erstellen müssen.
Verfasst: 01.01.2006 13:05
von hawk009
Aber ja.
Code: Alles auswählen
#MyWindow = 0
#MyGadget = 1
#MyButton = 2
If OpenWindow(#MyWindow,100,100,500,300,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"ListIcon Beispiel")
If CreateGadgetList(WindowID())
ListIconGadget(#MyGadget,5,5,500,200,"Spalte0",100,#PB_ListIcon_HeaderDragDrop|#PB_ListIcon_GridLines)
For x = 1 To 3
AddGadgetColumn(#MyGadget,x,"Spalte" + Str(x),100)
Next
ButtonGadget(#MyButton, 5, 230, 70, 20, "Zeige")
AddGadgetItem(#MyGadget, -1, "Wert 0" + Chr(10) + "Wert 1" + Chr(10) + "Wert 2" + Chr(10) + "Wert 3")
Repeat
EventID = WaitWindowEvent()
GID = EventGadgetID()
If EventID = #PB_Event_Gadget
If GID = #MyButton
Debug = GetColumnHeaderText(#MyGadget, 0) ; Funktion aus MoreListIcon Gadget Userlibary
Debug GetGadgetItemText(#MyGadget, 0, 0)
;Debug = GetGadgetText(#MyGadget)
EndIf
EndIf
Until EventID = #PB_Event_CloseWindow And EventWindowID() = #MyWindow
EndIf
EndIf
Bitte per Drag&Drop Spalte 3 ganz nach vorn ziehen.
Wie komme ich jetzt an den Spaltenkopf der ersten Spalte?
Gruß
Ralf
Verfasst: 01.01.2006 16:48
von roherter
Verfasst: 01.01.2006 18:38
von hawk009
Danke!
Damit hab ich die Lösung gefunden.
Code: Alles auswählen
Procedure.l GET_REAL_SPALTEN_INDEX(lhandle, lvspalte.l)
Protected speicherbuffer.l, spindex.l
anzcol = COUNT_COLUMNS(lhandle)
If lvspalte > (anzcol - 1)
ProcedureReturn -1
EndIf
speicherbuffer = AllocateMemory(anzcol * 4)
spindex = - 1
If SendMessage_(GadgetID(lhandle), #LVM_GETCOLUMNORDERARRAY, anzcol, speicherbuffer) <> #False
spindex = PeekL(speicherbuffer + lvspalte * 4)
EndIf
FreeMemory(speicherbuffer)
ProcedureReturn spindex
EndProcedure
lvspalte ist die sichtbare Spaltenr. (beginnend mit 0).
Zurück gegeben wird der Spaltenindex des Listicons.
Gruß
Ralf