Seite 1 von 1

Änderung im ListIcon HeaderDragDrop erfassen

Verfasst: 31.01.2009 23:33
von Aspirant
Hallo,
seit Langen habe ich mal wieder ne Frage naja eigentlich 2

Nach dem ich den Tag damit verbracht habe zu begreiffen warum es so schwer ist die veränderungen im "ListIcon HeaderDragDrop" bzw die veränder der Spaltenbreite durch den User zu erfasen. Hoffe ich hier auf hilfe das zu Lösen.

Möchte nur anmerken ich habe die Such Funktion benutzt aber keine in meinen Augen wirklich gute Lösung gefunden da alle irgend wie API-Funktionen nutzen was ich Lieber vermeinden würde.

Der sinn meiner frage ist ich möchte das ListIcon nach einne Neustart mit den vom User veränderten Standart einstellungen nutzen.

Ich Danke für evetulle Hilfe schon mal vorab.

AFG Aspi

Verfasst: 01.02.2009 04:41
von KeyKon
Ich wage es mal zu behaupten das das ohne API unmöglich is...

Mit API gehts auf jeden Fall so:

Code: Alles auswählen

Procedure HeaderCount(Gadget)
  hd = SendMessage_(GadgetID(Gadget), #LVM_GETHEADER, 0, 0)
  ProcedureReturn SendMessage_( hd, #HDM_GETITEMCOUNT, 0, 0)
EndProcedure 

Procedure HeaderToMem(Gadget)
  Columns = HeaderCount(Gadget)
  *Buffer = AllocateMemory(Columns*4*2)
  If SendMessage_(GadgetID(Gadget), #LVM_GETCOLUMNORDERARRAY, Columns, *Buffer)
    For c = 0 To Columns-1
      PokeL(*Buffer+Columns*4+c*4,GetGadgetItemAttribute(Gadget,1,#PB_ListIcon_ColumnWidth,c))
    Next
    ProcedureReturn *Buffer
  Else
    FreeMemory(*Buffer)
    ProcedureReturn 0
  EndIf
EndProcedure

Procedure MemToHeader(Gadget,*Buffer)
  Columns = HeaderCount(Gadget)
  For c = 0 To Columns-1
    SetGadgetItemAttribute(Gadget,1,#PB_ListIcon_ColumnWidth,PeekL(*Buffer+Columns*4+c*4),c)
  Next
  SendMessage_(GadgetID(Gadget), #LVM_SETCOLUMNORDERARRAY, Columns, *Buffer)
  DisableGadget(Gadget,1):DisableGadget(Gadget,0)
EndProcedure
Kleines Beispiel:

Code: Alles auswählen

If OpenWindow(0, 0, 0, 640, 300, "ListIconGadgets", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)  
  
  ListIconGadget(0,  10,  10, 620,280, "Column 1", 100, #PB_ListIcon_HeaderDragDrop|#PB_ListIcon_GridLines)
  For b = 2 To 4          ; fügt 3 weitere Spalten zu jedem ListIcon hinzu
    AddGadgetColumn(0, b, "Column " + Str(b), 65)
  Next
  For b = 1 To 4          ; fügt 4 Einträge auf jeder Zeile der ListIcons hinzu
    AddGadgetItem(0, -1, "Item "+Str(b)+".1"+Chr(10)+"Item "+Str(b)+".2"+Chr(10)+"Item "+Str(b)+".3"+Chr(10)+"Item "+Str(b)+".4")
  Next
    
  If ReadFile(0,"columns.config")
    *Load = AllocateMemory(FileSize("columns.config"))
    ReadData(0,*Load,FileSize("columns.config"))
    CloseFile(0)
    MemToHeader(0,*Load)
    FreeMemory(*Load)
  EndIf
    
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
    
  *Save = HeaderToMem(0)
  If *Save And CreateFile(0,"columns.config")
    WriteData(0,*Save,MemorySize(*Save))
    CloseFile(0)
    FreeMemory(*Save)
  EndIf
EndIf
Dadurch das die Prozeduren das nich direkt auf die Platte schreiben kann man den Speicherbereich wunderbar mit in irgendeine komplette Konfigurationsdatei schreiben...

Übrigens, is der GrafikBug in Verbindung mit GridLines (Wenn man die Erste Spalte nach weiter hinten versetzt fehlt da eine Trennlinie) PB- oder Windowsverschuldet?


PS: Mit welcher Funktion/API kann man eigentlich die GadgetColumns zählen?

Verfasst: 01.02.2009 09:17
von hjbremer
KeyKon hat geschrieben:Mit welcher Funktion/API kann man eigentlich die GadgetColumns zählen?

Code: Alles auswählen

Procedure Headercount(Gadget)

hd = SendMessage_(GadgetID(Gadget), #LVM_GETHEADER, 0, 0) 

ProcedureReturn SendMessage_( hd, #HDM_GETITEMCOUNT, 0, 0) 
EndProcedure


Verfasst: 01.02.2009 11:47
von Aspirant
Hallo und Guten Morgen,
Das es nicht ohne Api geht finde ich jetzt zwar Blöd aber kann mann dann woll Leider nicht ändern.
@KeyKon
dir Danke ich für deine Beispiele sehen schon mal erheblich compackter aus als das was ich gefunden hatte und es kommt mir sehr endgegegen das ich sie belieb weiter verarbeiten (sollen in einer SQL gespeichert werden.

Danke für deine mühe.

@hjbremer
Ich kann deine Antwort zwar nicht wirklich gebrauchen ( noch nicht) aber auch dir danke ich für deinen Zeitlichen einsatz.

so dann werde ich jetzt mal versuchen weiter zu kommen

MFG Aspi

Verfasst: 01.02.2009 14:38
von KeyKon
THX hjbremer, habe dadurch mein Beispiel oben noch vereinfacht indem man keine Columnanzahl mehr angeben muss...