Seite 1 von 1

Icons ändern im ListIcon

Verfasst: 01.11.2006 20:57
von Frogger
Kann man irgendwie die Icons von einzelnen Items ändern ohne dabei die ganzen Einträge neu zu schreiben?
...also quasi on the fly...

Verfasst: 01.11.2006 22:44
von Fluid Byte

Code: Alles auswählen

lvi.LV_ITEM
lvi\mask = #LVIF_IMAGE
lvi\iItem = xyz
lvi\iImage = xyz

SendMessage_(xyz,#LVM_SETITEM,0,lvi)

Verfasst: 02.11.2006 00:31
von Frogger
hm...also das funktioniert nicht so wie es sollte.
Wenn vorher ein Icon angezeigt wurde, verschwindet es nachdem dieser Code ausgeführt wurde.

Oder hab ich da was übersehen?

Code: Alles auswählen

lvi.LV_ITEM
lvi\mask = #LVIF_IMAGE
lvi\iItem = 2
lvi\iImage = ImageID(1) 
SendMessage_(GadgetID(#ListIconGadget),#LVM_SETITEM,0,lvi)

Verfasst: 02.11.2006 00:54
von Deeem2031
iImage ist ein Index (wie man an dem "i" vorm Namen sehen kann) und kein handle (sonst wärs ein "h"). Und der Index bezieht sich auf (wenn ich mich richtig erinnere) eine IconListe des ListView-Windows. Geht also so nich, solange du die Liste nich kennst.

Verfasst: 02.11.2006 12:53
von Shardik

Code: Alles auswählen

Enumeration 
  #ListIcon
  #ChangeButton
EndEnumeration

Procedure ChangeIcon(IconID.L, Row.L, IconIndex.L) 
  LVITEM.LV_ITEM
  LVITEM\Mask = #LVIF_IMAGE
  LVITEM\iItem = Row
  LVITEM\iImage = IconIndex
  SendMessage_(GadgetID(IconID), #LVM_SETITEM, 0, @LVITEM)
EndProcedure 

If OpenWindow(1, 0, 0, 270, 110, "Änderung von Icons im ListIconGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(1))
  ListIconGadget(#ListIcon, 10, 10, 250, 57, "Icon", 40, #PB_ListIcon_GridLines)
  ButtonGadget(#ChangeButton, 85, 80, 110, 20, "1.Icon austauschen")
  Icon1 = LoadImage(1, #PB_Compiler_Home + "Examples\Sources\Data\CdPlayer.ico")
  Icon2 = LoadImage(2, #PB_Compiler_Home + "Examples\Sources\Data\Drive.bmp")
  AddGadgetColumn(#ListIcon, 1, "Text", 206)
  AddGadgetItem(#ListIcon, -1, "" + #LF$ + "Icon 1", Icon1)
  AddGadgetItem(#ListIcon, -1, "" + #LF$ + "Icon 2", Icon2)

  CurrentIcon = 1

  Repeat
    WindowEvent = WaitWindowEvent()
 
    If WindowEvent = #PB_Event_Gadget
      If EventGadget() = #ChangeButton
        CurrentIcon = CurrentIcon ! 3
        ChangeIcon(#ListIcon, 0, CurrentIcon) 
      EndIf
    EndIf
  Until WindowEvent = #PB_Event_CloseWindow
EndIf

Verfasst: 02.11.2006 17:20
von Fluid Byte
Nur ums abzurunden...
iImage ist ein Index (wie man an dem "i" vorm Namen sehen kann) und kein handle (sonst wärs ein "h").
Das "i" steht für den Datentyp "Integer". :wink:

Verfasst: 03.11.2006 01:32
von Frogger
Danke an alle :)

@Shardik
Dein Code funktioniert einwandfrei :wink:
Genau sowas hab ich gesucht.

Verfasst: 10.06.2008 19:59
von pickelrobert
Hallo,

der Diskussionsfaden ist zwar schon etwas älter, aber mittlerweile sollte diese Funktion in PB eingebaut sein, damit's auch unter den anderen Betriebssystemen läuft. Oder irre ich mich da?