ListIconGadget-Größe ändern

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

ListIconGadget-Größe ändern

Beitrag 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?
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: ListIconGadget-Größe ändern

Beitrag 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:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: ListIconGadget-Größe ändern

Beitrag 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.
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: ListIconGadget-Größe ändern

Beitrag von mk-soft »

Wollte ich noch schreiben...

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

...
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: ListIconGadget-Größe ändern

Beitrag von RSBasic »

@mk-soft
Danke erstmal für den Code (im Voraus).
Habs aber noch nicht getestet.
Ich werds später mal testen.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten