Seite 1 von 1

ListIconGadget-Größe ändern

Verfasst: 22.01.2011 19:38
von RSBasic
Hi,


ich hab ein Beispielcode aus diesem Thread ( http://www.purebasic.fr/english/viewtop ... 91#p211191 ) entnommen, womit man die Größe der Items im ListIconGadget ändern kann.
Das Ändern der Größe funktioniert eigentlich, aber eine Sache versteh' ich nicht so ganz.
Ich hab irgendein Problem festgestellt und kann das nicht nachvollziehen.

Ich habe diesen Code:

Code: Alles auswählen

CreateImage(0, 100, 100)
StartDrawing(ImageOutput(0))
Box(0, 0, 100, 100, RGB(0, 0, 0))
StopDrawing()

CreateImage(1, 100, 100)
StartDrawing(ImageOutput(1))
Box(0, 0, 100, 100, RGB(0, 255, 0))
StopDrawing()

CreateImage(2, 100, 100)
StartDrawing(ImageOutput(2))
Box(0, 0, 100, 100, RGB(0, 0, 255))
StopDrawing()

CreateImage(3, 100, 100)
StartDrawing(ImageOutput(3))
Box(0, 0, 100, 100, RGB(255, 0, 0))
StopDrawing()

newIL = ImageList_Create_(100, 100, #ILC_COLOR32|#ILC_MASK, 0, 20)

ImageList_Add_(newIL, ImageID(0), 0)
ImageList_Add_(newIL, ImageID(1), 0)
ImageList_Add_(newIL, ImageID(2), 0)
ImageList_Add_(newIL, ImageID(3), 0)

If OpenWindow(0, 0, 0, 700, 500, "",  #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ListIconGadget(0, 10, 10, 680, 480, "", 200)
  SetGadgetAttribute(0,#PB_ListIcon_DisplayMode,#PB_ListIcon_LargeIcon)
  
  AddGadgetItem(0 , -1, item$, ImageID(1))
  AddGadgetItem(0 , -1, item$, ImageID(2))
  AddGadgetItem(0 , -1, item$, ImageID(3))
  
  oldIL = SendMessage_(GadgetID(0), #LVM_GETIMAGELIST, #LVSIL_NORMAL, 0)
  SendMessage_(GadgetID(0), #LVM_SETIMAGELIST, #LVSIL_NORMAL, newIL)
  ImageList_Destroy_(oldIL)
  
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Er erstellt drei Einträge mit verschiedenen Grafiken.
Schön und gut, aber wenn ich testweise folgende Zeile entfernen möchte:

Code: Alles auswählen

ImageList_Add_(newIL, ImageID(0), 0)
Dann erstellt er zwar weiterhin drei Einträge, aber nur die ersten zwei haben eine Grafik und der letzte Eintrag hat komischerweise keine Grafik mehr.
Warum?
Unten benötige ich doch nur die Grafiken mit der Nummer 1, 2 und 3, aber keine 0.
Muss die erste Grafik die Nummer "0" haben oder wie soll ich das verstehen?

Re: ListIconGadget-Größe ändern

Verfasst: 23.01.2011 18:19
von mk-soft
Hast nur drei Items angelegt...

Code: Alles auswählen

CreateImage(0, 100, 100)
StartDrawing(ImageOutput(0))
Box(0, 0, 100, 100, RGB(0, 0, 0))
StopDrawing()

CreateImage(1, 100, 100)
StartDrawing(ImageOutput(1))
Box(0, 0, 100, 100, RGB(0, 255, 0))
StopDrawing()

CreateImage(2, 100, 100)
StartDrawing(ImageOutput(2))
Box(0, 0, 100, 100, RGB(0, 0, 255))
StopDrawing()

CreateImage(3, 100, 100)
StartDrawing(ImageOutput(3))
Box(0, 0, 100, 100, RGB(255, 0, 0))
StopDrawing()


Procedure SetListViewImage(Gadget, Item, Image)
  
  Protected lvItem.lv_item
  Protected handle
  Protected result
  
  handle = GadgetID(gadget)
  
  With lvItem
    \mask = #LVIF_IMAGE
    \iItem = Item
    \iSubItem = 0
    \iImage = Image
  EndWith
  SendMessage_(handle, #LVM_SETITEM, 0, lvItem)
  ProcedureReturn result
  
EndProcedure

newIL = ImageList_Create_(100, 100, #ILC_COLOR32|#ILC_MASK, 0, 20)

ImageList_Add_(newIL, ImageID(0), 0)
ImageList_Add_(newIL, ImageID(1), 0)
ImageList_Add_(newIL, ImageID(2), 0)
ImageList_Add_(newIL, ImageID(3), 0)

If OpenWindow(0, 0, 0, 700, 500, "",  #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ListIconGadget(0, 10, 10, 680, 480, "Column", 200)
  SetGadgetAttribute(0,#PB_ListIcon_DisplayMode,#PB_ListIcon_LargeIcon)
 
  AddGadgetItem(0 , -1, "0")
  AddGadgetItem(0 , -1, "1")
  AddGadgetItem(0 , -1, "2")
  AddGadgetItem(0 , -1, "3")
  
  oldIL = SendMessage_(GadgetID(0), #LVM_GETIMAGELIST, #LVSIL_NORMAL, 0)
  SendMessage_(GadgetID(0), #LVM_SETIMAGELIST, #LVSIL_NORMAL, newIL)
  ImageList_Destroy_(oldIL)
  
  For i = 0 To 3
    SetListViewImage(0, i, i)  
  Next
  
  
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
FF :wink:

Re: ListIconGadget-Größe ändern

Verfasst: 23.01.2011 18:40
von NicTheQuick
RSBasic will ja auch nur drei Einträge drin haben. Und weil er das Image mit ID 0 nicht braucht, entfernt er die von ihm aufgezeigte Zeile.

Er hat das Problem doch genau beschrieben.

Re: ListIconGadget-Größe ändern

Verfasst: 23.01.2011 19:28
von mk-soft
Wollte ich noch schreiben...

Um ImageList zu verwenden muss man LVM_SETITEM verwenden und nicht die ImageID direkt zu weisen.

...

Re: ListIconGadget-Größe ändern

Verfasst: 24.01.2011 15:52
von RSBasic
@mk-soft
Danke erstmal für den Code (im Voraus).
Habs aber noch nicht getestet.
Ich werds später mal testen.