Seite 1 von 1

Gruppen-Spielereien mit ListIconGadget

Verfasst: 16.04.2009 18:30
von Andreas
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

Verfasst: 16.04.2009 19:06
von ts-soft
:allright:
werde ich bestimmt mal brauchen können.

Verfasst: 19.04.2009 14:34
von Andesdaf
:allright:
Gibts auch im CodeArchiv, aber komplizierter :)