Änderung im ListIcon HeaderDragDrop erfassen

Anfängerfragen zum Programmieren mit PureBasic.
Aspirant
Beiträge: 101
Registriert: 19.10.2006 12:19

Änderung im ListIcon HeaderDragDrop erfassen

Beitrag 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
Ich würde mich ja gerne geistig mit dir duellieren, aber wie ich sehe bist du unbewaffnet.
================================
WinXP Pro, W2k3, Eisfair
-----------------------------
PB 4.40 auf WinXPpro kauf
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag 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?
Zuletzt geändert von KeyKon am 01.02.2009 14:37, insgesamt 1-mal geändert.
(\/) (°,,,°) (\/)
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

Beitrag 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

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
Aspirant
Beiträge: 101
Registriert: 19.10.2006 12:19

Beitrag 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
Ich würde mich ja gerne geistig mit dir duellieren, aber wie ich sehe bist du unbewaffnet.
================================
WinXP Pro, W2k3, Eisfair
-----------------------------
PB 4.40 auf WinXPpro kauf
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag von KeyKon »

THX hjbremer, habe dadurch mein Beispiel oben noch vereinfacht indem man keine Columnanzahl mehr angeben muss...
(\/) (°,,,°) (\/)
Antworten