(Gast)
n/a Beiträge
|
Re: ListView, Icon und SHGetFileInfo
12. Mai 2004, 12:04
Jetzt wo du´s sagst -
Ich habe spaßeshalber einer meiner Partitionen mal ein anderes Symbol verpasst, und die Funktion "SHGetFileInfo" liefert anstandslos eben dieses neue Symbol zurück, und ich sehe es dann in der List-View.
So sieht mein Code aus:
Delphi-Quellcode:
uses
CommCtrl, ShellAPI;
procedure TForm1.FormCreate(Sender: TObject);
var
hImgBig : HIMAGELIST;
fi : TSHFileInfo;
dwBufLen : dword;
buf : string;
p : pchar;
li : TListItem;
begin
// Imageliste für große Symbole holen & zuweisen
hImgBig := HIMAGELIST(SHGetFileInfo(' ',0,fi,sizeof(fi),
SHGFI_SYSICONINDEX or SHGFI_ICON));
if(hImgBig <> 0) then
ilBig.Handle := hImgBig;
// unter der Maßgabe, dass "ilBig" eine ImageList auf
// der Form ist, die in der List-View als "LargeImages"
// eingetragen ist
// List-View leeren
ListView1.Items.Clear;
ListView1.Items.BeginUpdate;
dwBufLen := GetLogicalDriveStrings(0, nil);
if(dwBufLen > 0) then
begin
SetLength(buf,dwBufLen);
if(GetLogicalDriveStrings(dwBufLen,@buf[1]) <> 0) and
(buf <> ' ') then
begin
p := @buf[1];
while(p[0] <> #0) do
begin
li := ListView1.Items.Add;
case GetDriveType(p) of
DRIVE_FIXED:
li.Caption := Format(' Festplatte %s',[p]);
DRIVE_REMOVABLE:
li.Caption := Format(' Wechsellaufwerk %s',[p]);
DRIVE_REMOTE:
li.Caption := Format(' Netzlaufwerk %s',[p]);
DRIVE_CDROM:
li.Caption := Format(' CD/DVD-Laufwerk %s',[p]);
DRIVE_RAMDISK:
li.Caption := Format(' RAM-Disk %s',[p]);
end;
// Symbol ermitteln
SHGetFileInfo(p,0,fi,sizeof(fi),
SHGFI_ICON or SHGFI_SYSICONINDEX);
li.ImageIndex := fi.iIcon;
inc(p,lstrlen(p)+1);
end;
buf := ' ';
end;
end;
ListView1.Items.EndUpdate;
end;
|
|
Zitat
|