Gruppen-Spielereien mit ListIconGadget
Verfasst: 16.04.2009 18:30
Vielleicht kann es ja jemand brauchen.
Code: Alles auswählen
Global wString.l
Procedure StringToWStr(string$)
SysFreeString_(wString)
Protected Unicode$ = Space(StringByteLength(string$, #PB_Unicode) + 1)
Protected bstr_string.l
PokeS(@Unicode$, String$, -1, #PB_Unicode)
wString = SysAllocString_(@Unicode$)
ProcedureReturn wString
EndProcedure
Procedure WinCallback(WindowID, Message, wParam, lParam)
Result = #PB_ProcessPureBasicEvents
Select Message
Case #WM_NOTIFY
*CD.NMLVCUSTOMDRAW = lParam
If *CD\nmcd\hdr\Code = #NM_CUSTOMDRAW
If *CD\nmcd\dwDrawStage = #CDDS_PREPAINT : ProcedureReturn #CDRF_NOTIFYITEMDRAW : EndIf
If *CD\nmcd\dwDrawStage = #CDDS_ITEMPREPAINT : ProcedureReturn #CDRF_NOTIFYSUBITEMDRAW : EndIf
;wenn Spalte 1
If (*CD\nmcd\dwDrawStage = #CDDS_SUBITEM|#CDDS_ITEMPREPAINT) And (*CD\iSubItem = 0)
*CD\clrText=$B60C07;Textfarbe
*CD\clrTextBk=$DEFBCD;Texthintergrund
EndIf
;wenn Spalte 2
If (*CD\nmcd\dwDrawStage = #CDDS_SUBITEM|#CDDS_ITEMPREPAINT) And (*CD\iSubItem = 1)
*CD\clrText=$DEFBCD;Textfarbe
*CD\clrTextBk=$B60C07;Texthintergrund
EndIf
EndIf
EndSelect
ProcedureReturn Result
EndProcedure
If OpenWindow(0, 0, 0, 640, 300, "ListIconGadgets", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
SetWindowCallback(@WinCallback())
Listview.l = ListIconGadget(0, 10, 25, 300, 200, "", 80,#LVS_NOCOLUMNHEADER)
AddGadgetColumn(0, 1, "", 80)
;Gruppen-Eigenscaften festlegen
GM.LVGROUPMETRICS
GM\cbSize = SizeOf(LVGROUPMETRICS)
GM\mask = #LVGMF_BORDERCOLOR|#LVGMF_BORDERSIZE|#LVGMF_TEXTCOLOR
SendMessage_(Listview,#LVM_GETGROUPMETRICS,0,GM);Gruppen-Eigenschaften holen
GM\crHeader = RGB(0,0,128);Gruppenkopf-Farbe
GM\Bottom = GM\Bottom + 4;Gruppen-Fuss um 4 Pixel erweitern
SendMessage_(Listview,#LVM_SETGROUPMETRICS,0,GM);Gruppen-Eigenschaften setzen
SendMessage_(Listview,#LVM_ENABLEGROUPVIEW,1,0);Gruppen-Ansicht einschalten
;Gruppen anlegen
Group.LVGROUP
Group\cbSize=SizeOf(LVGROUP)
Group\mask=#LVGF_HEADER|#LVGF_GROUPID
;Gruppe mit ID 111 anlegen
Group\pszHeader= StringToWStr("Gruppe1");Text für Gruppenkopf
Group\iGroupId = 111
SendMessage_(Listview,#LVM_INSERTGROUP,-1,Group);Gruppe einfügen
;Gruppe mit ID 222 anlegen
Group\pszHeader= StringToWStr("Gruppe2");Text für Gruppenkopf
Group\iGroupId = 222
SendMessage_(Listview,#LVM_INSERTGROUP,-1,Group);Gruppe einfügen
;Gruppe mit ID 333 anlegen
Group\pszHeader= StringToWStr("Gruppe3");Text für Gruppenkopf
Group\iGroupId = 333
SendMessage_(Listview,#LVM_INSERTGROUP,-1,Group);Gruppe einfügen
;Listview-Item anlegen
Item.LVITEM
Item\mask = #LVIF_GROUPID
Item\iGroupId = 333;Item-ID setzen
For a = 0 To 3
AddGadgetItem(0, 0, "Item "+Str(a+1)+Chr(10)+Str(Item\iGroupId))
SendMessage_(Listview,#LVM_SETITEM,0,Item);das neue Item einfügen
Next
Item\iGroupId = 111;Item-ID setzen
For a = 0 To 3
AddGadgetItem(0, 0, "Item "+Str(a+1)+Chr(10)+Str(Item\iGroupId))
SendMessage_(Listview,#LVM_SETITEM,0,Item);das neue Item einfügen
Next
Item\iGroupId = 222;Item-ID setzen
For a = 0 To 3
AddGadgetItem(0, 0, "Item "+Str(a+1)+Chr(10)+Str(Item\iGroupId))
SendMessage_(Listview,#LVM_SETITEM,0,Item);das neue Item einfügen
Next
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
SysFreeString_(wString)
EndIf