Listicon Gadget, Spalte bestimmen

Anfängerfragen zum Programmieren mit PureBasic.
hawk009
Beiträge: 7
Registriert: 31.12.2005 20:02

Listicon Gadget, Spalte bestimmen

Beitrag 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
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

Hast du einen Beispielcode?
Dann helfen dir oft mehr Leute, als wenn sie selber einen erstellen müssen.
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
hawk009
Beiträge: 7
Registriert: 31.12.2005 20:02

Beitrag 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
Benutzeravatar
roherter
Beiträge: 1407
Registriert: 10.04.2005 18:58
Kontaktdaten:

Beitrag von roherter »

Purebasic 5.0 32bit und 64 bit

I'm back from hell
hawk009
Beiträge: 7
Registriert: 31.12.2005 20:02

Beitrag 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
Antworten