Einzelnen Beitrag anzeigen

MathiasSimmack
(Gast)

n/a Beiträge
 
#7

Re: ListView, Icon und SHGetFileInfo

  Alt 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;
  Mit Zitat antworten Zitat