Seite 1 von 1

ListIconGadget mit GruppenBild

Verfasst: 10.12.2011 21:16
von canrap
Hey Leute :)

Ich versuch jetz schon seit längerer Zeit meine Gruppen mit Bildern auszustatten, aber es will mal wieder einfach nicht klappen :(
Es scheitert schon, wenn ich versuche meinem ListIconGadget eine LVSIL_GROUPHEADER Imagelist unterzuschieben, mit allen anderen Konstanten funktionierts, nur eben nicht mit dieser.

Hier mal ein Beispiel:

Code: Alles auswählen

If OpenWindow(0,0,0,270,140,"ListViewGadget",#PB_Window_SystemMenu)
  ListIconGadget(0,10,10,250,120,"",100)
  LoadImage(0,#PB_Compiler_Home + "Examples\Sources\Data\CdPlayer.ico")
  hImageList = ImageList_Create_(16,16,#ILC_COLOR32 | #ILC_MASK,0,1)
  Icon = ImageList_AddIcon_(hImageList,ImageID(0))
  Test = SendMessage_(GadgetID(0),#LVM_SETIMAGELIST,2,hImageList);Mit der 3 für LVSIL_Groupheader funktionierts garnicht
  MessageRequester("",Str(Test))
  Test = SendMessage_(GadgetID(0),#LVM_SETIMAGELIST,2,hImageList)
  MessageRequester("",Str(Test))
  
  For a=1 To 12
    AddGadgetItem (0,-1,"Item "+Str(a)+" of the Listview")
  Next
  
  Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
EndIf
Wobei mir hier direkt auffällt das ich aufeinmal zweimal Sendmessage aufrufen muss, bis die ImageList hinzugefügt wird :freak:

Hättet ihr vielleicht irgendwelche Ideen?

Danke schonmal :) und nen schönen Abend

Re: ListIconGadget mit GruppenBild

Verfasst: 10.12.2011 21:29
von RSBasic
Sorry, ich weiß grad nicht, was du möchtest. Möchtest du GroupView-Ansicht hinzufügen + Icon?
Also etwa so?

Code: Alles auswählen

EnableExplicit

Define EventID
Define g
Define i
Define hImageList
Define Icon

#LVM_ENABLEGROUPVIEW = #LVM_FIRST + 157
#LVM_MOVEITEMTOGROUP = #LVM_FIRST + 154
#LVM_INSERTGROUP = #LVM_FIRST + 145
#LVIF_GROUPID = $0100
#LVGA_HEADER_LEFT = $1
#LVGA_HEADER_CENTER = $2
#LVGA_HEADER_RIGHT = $4
#LVGS_NORMAL = $0
#LVGS_COLLAPSED = $1
#LVGS_HIDDEN = $2
#LVGF_HEADER = $1
#LVGF_FOOTER = $2
#LVGF_STATE = $4
#LVGF_ALIGN = $8
#LVGF_GROUPID = $10

Procedure StringToUnicode(pbstrptr.l, ucstrptr.l)
  MultiByteToWideChar_ (#CP_ACP, 0, pbstrptr, Len(PeekS(pbstrptr)), ucstrptr, Len(PeekS(ucstrptr)))
  PokeL( ucstrptr + Len(PeekS(pbstrptr))*2, 0)
EndProcedure 

Procedure ListIcon_AddGroup(gadget.l, text.s, groupid.l)
  Protected lvg.LVGROUP
  Protected text_uc.s
  
  lvg.LVGROUP\cbSize = SizeOf(LVGROUP)
  lvg\mask = #LVGF_GROUPID | #LVGF_ALIGN | #LVGF_HEADER
  lvg\iGroupId = groupid
  lvg\uAlign = #LVGA_HEADER_LEFT
  text_uc.s = Space(260)  
  StringToUnicode(@text, @text_uc) 
  lvg\pszHeader = @text_uc
  SendMessage_ (GadgetID(gadget), #LVM_INSERTGROUP, -1, @lvg)
EndProcedure

Procedure ListIcon_EnableGroupView(gadget.l, state.l)
  SendMessage_ (GadgetID(gadget), #LVM_ENABLEGROUPVIEW, state, 0)
EndProcedure

Procedure ListIcon_AddItem(gadget.l, text.s, groupid.l)
  Protected itm.LVITEM
  
  itm.LVITEM\mask = #LVIF_TEXT | #LVIF_GROUPID
  itm\pszText = @text
  itm\iGroupId = groupid
  SendMessage_ (GadgetID(gadget), #LVM_INSERTITEM, 0, @itm)
EndProcedure

If OpenWindow(0,0,0,500,400,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  ListIconGadget(1,10,10,WindowWidth(0)-20,WindowHeight(0)-20,"Spalte",400,0)
  
  ListIcon_EnableGroupView(1, 1)
  
  LoadImage(0,#PB_Compiler_Home + "Examples\Sources\Data\CdPlayer.ico")
  hImageList = ImageList_Create_(16,16,#ILC_COLOR32 | #ILC_MASK,0,1)
  Icon = ImageList_AddIcon_(hImageList,ImageID(0))
  
  SendMessage_(GadgetID(1), #LVM_SETIMAGELIST, #LVSIL_SMALL, hImageList)
  
  For g=1 To 5
    ListIcon_AddGroup(1, "This is group "+Str(g), g)
    For i=1 To 5
      ListIcon_AddItem(1, "Item "+Str((g-1)*5+i)+" belongs to group "+Str(g), g)
    Next
  Next
  
  Repeat
    EventID=WaitWindowEvent()
    If EventID = #PB_Event_CloseWindow
      End
    EndIf
  ForEver
EndIf

Re: ListIconGadget mit GruppenBild

Verfasst: 10.12.2011 21:44
von canrap
Das wars fast, aber aufeinmal scheint das Problem von allein verschwunden zu sein :?

Ich danke dir :)

Re: ListIconGadget mit GruppenBild

Verfasst: 11.12.2011 00:19
von RSBasic
@canrap
Ich weiß zwar nicht, ob du dein Problem bereits behoben hast (mit dem Group-Icon), aber ich kann dir nur ein paar Hinweise geben.
Die von PB bereitgestellte Struktur "LVGROUP" ist unvollständig: http://msdn.microsoft.com/en-us/library ... 85%29.aspx
Erstell am besten eine neue Struktur, z.B. mit dem Namen "LVGROUPEX".
Auf der MSDN-Seite wird auch ein Eintrag aufgeführt namens "iTitleImage". Das ist glaube ich das, was du suchst. Es ist aber erst ab Vista verfügbar.
Außerdem habe ich auch ein Beispielcode gefunden und zwar: http://pages.videotron.com/lyra/PowerBA ... iew02.html
Vielleicht hilft dir das bei der Umsetzung. Viel Erfolg. ;)