Gruppen-Spielereien mit ListIconGadget

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Andreas
ToolbarKönig
Beiträge: 142
Registriert: 08.09.2004 08:33

Gruppen-Spielereien mit ListIconGadget

Beitrag 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
Gruss Andreas
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

:allright:
werde ich bestimmt mal brauchen können.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

:allright:
Gibts auch im CodeArchiv, aber komplizierter :)
Win11 x64 | PB 6.20
Antworten