Icons ändern im ListIcon

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Frogger
Beiträge: 425
Registriert: 14.03.2006 19:27
Kontaktdaten:

Icons ändern im ListIcon

Beitrag 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...
[PB4.20]
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag 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)
Benutzeravatar
Frogger
Beiträge: 425
Registriert: 14.03.2006 19:27
Kontaktdaten:

Beitrag 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)
[PB4.20]
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag 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.
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Beitrag 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
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag 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:
Benutzeravatar
Frogger
Beiträge: 425
Registriert: 14.03.2006 19:27
Kontaktdaten:

Beitrag von Frogger »

Danke an alle :)

@Shardik
Dein Code funktioniert einwandfrei :wink:
Genau sowas hab ich gesucht.
[PB4.20]
pickelrobert
Beiträge: 207
Registriert: 09.12.2004 22:09

Beitrag 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?
Antworten