Hallo,
ich hab den Quellcode für Listviews mit TileView (Kacheln) von Uwe "Pascal" Niemeyer genommen und etwas gepimpt. Im Großen und Ganzen die Vorbereitung daraus eine INC zu machen:
Code
window 100,10-500,550
usefont "MS Sans Serif",15,7,0,0,0
setdialogfont 1
usermessages 16
$H D:\XProfan\XProfan\Include\Windows.ph
$H D:\XProfan\XProfan\Include\commctrl.ph
declare Tiles#,TileInfo#,TileView#,icolist&,lv&
struct Tiles=x1&,x2&,x3&,x4&,x5&'Array: 5 mögliche Spalten / Extra-Zeilen
struct LVTILEINFO=Size&,Item&,Columns&,puColumns&
struct TILEVIEW=Size&,Mask&,Flags&,x&,y&,Lines&,xa&,ya&,xb&,yb&
proc PrepareTileView
dim Tiles#,Tiles
dim TileInfo#,LVTILEINFO
dim TileView#,TILEVIEW
TileInfo#.Size&=sizeof(TileInfo#)
TileInfo#.puColumns&=Tiles#
TileView#.Size&=sizeof(TileView#)
TileView#.Mask& =2'LVTVIM_COLUMNS
TileView#.Lines&=5'Max. Anzahl Zeilen (nicht verwendete leer)
'IcoList&=~ImageList_Create(48,48,1,1,0)
IcoList&=Create("Imagelist",48,48)
external("comctl32","ImageList_AddIcon",IcoList&,~LoadIcon(%hinstance,"Profan"))
sendmessage(Lv&,~LVM_SETIMAGELIST,~LVSIL_NORMAL,IcoList&)
sendmessage(Lv&,(~LVM_FIRST+142),4,0)'LVM_SETVIEW,LV_VIEW_TILE
sendmessage(Lv&,(~LVM_FIRST+162),0,TileView#)'LVM_SETTILEVIEWINFO
TileInfo#.Columns&=4'Anzahl Spalten als Extra-Zeilen
Tiles#.x1& =1
Tiles#.x2& =2
Tiles#.x3& =3
Tiles#.x4& =4
endproc
proc AddIcoString
Parameters l&,a$
addstring(L&,a$)
TileInfo#.Item& =GetCount(l&)-1'Zeile 0
sendmessage(L&,(~LVM_FIRST+164),0,TileInfo#)'LVM_SETTILEINFO
endproc
Lv&=create("gridbox",%hwnd,"a;0;0;b;0;0;c;0;0;d;0;0;e;0;0",0,10,10,300,420)'5 Spalten
PrepareTileView
AddIcoString lv&,"Text1|Sub11|Sub12|Sub13|Sub14"
AddIcoString lv&,"Text2|Sub21|Sub22|Sub23|Sub24"
AddIcoString lv&,"Text3|Sub31|Sub32|Sub33|Sub34"
while 1
waitinput
case %umessage=16:break'Ende
endwhile
case IcoList&:~ImageList_Destroy(IcoList&)
dispose Tiles#
dispose TileInfo#
dispose TileView#
Alles anzeigen
Der Quellcode läuft einwandfrei, aber wie zum Henker kriege ich ihn dazu, dass ein Item ein anderes Icon außer dem ersten bekommt? Ich kann via
zum Beispiel ein weiteres Icon hinzufügen, aber alle Items haben das erste.
Nachtrag:
Ich habe jetzt folgendes probiert:
Code
Struct LVI=MASK&,ITEM&,SUBITEM&,STATE&,STATEMASK&,TEXT&,TEXTMAX&,IMAGE&,PARAM&,Ident&,GroupId&,cColumns&,puColumns&,piColFmt&,iGroup&
proc LVSetImage
Parameters listview&,index&,image&
declare lv#
Dim lv#,LVI
Lv#.Item&=index&
'sendmessage(Listview&,~LVM_GETITEM,0,Lv#)
Lv#.Mask&=~LVIF_IMAGE
Lv#.Image&=image&
sendmessage(Listview&,~LVM_SETITEM,0,Lv#)
Dispose lv#
endproc
Alles anzeigen
Laut MSDN kann ich das Item mit LVM_SETITEM verändern, benötige eine LVITEM-Struktur und muss MASK den Wert LVIF_IMAGE zuweisen. Das habe ich getan, aber der Mist geht trotzdem nicht.