Einzelnen Beitrag anzeigen

Benutzerbild von littleDave
littleDave

Registriert seit: 27. Apr 2006
Ort: München
556 Beiträge
 
Delphi 7 Professional
 
#15

Re: Icon - Symbol von Dateityp ermitteln (Speicherort)

  Alt 14. Mai 2008, 13:59
Ich hab da mal n fetzen Code für dich, den ich vor ca. 5 Jahren mal gefunden hab. Er zwar nicht sehr gut, aber er funktioniert (bei mir ):

Diese Funktion im FormCreate-Event aufrufen:
Delphi-Quellcode:
procedure Createimages;
var
 SysIL : uint;
 SFI : TSHFileInfo;
begin
  LargeImages := TImageList.Create(MainForm);
  SysIL := SHGetFileInfo('', 0, SFI, SizeOf(SFI), SHGFI_SYSICONINDEX or SHGFI_LARGEICON);
  if SysIL <> 0 then begin
    LargeImages.Handle := SysIL;
    LargeImages.ShareImages := TRUE;
  end;
  SmallImages := TImageList.Create(MainForm);
  SysIL := SHGetFileInfo('', 0, SFI, SizeOf(SFI), SHGFI_SYSICONINDEX or SHGFI_SMALLICON);
  if SysIL <> 0 then begin
    SmallImages.Handle := SysIL;
    SmallImages.ShareImages := TRUE;
  end;
  MainForm.ListView.LargeImages:=LargeImages;
  MainForm.ListView.SmallImages:=SmallImages;
end;
Und dann einfach einlesen:
Delphi-Quellcode:
procedure VerzeichnisEinlesen(VerzName:string);
var NewItem : TListItem;
    Info : TSHFileInfo;
    SR : TSearchRec;
begin
  MainForm.ListView.Items.BeginUpdate;
  if VerzName[length(VerzName)]<>'\then
    VerzName:=VerzName+'\';
  with MainForm do begin
    ListView.Items.Clear;
    if FindFirst(VerzName+'*.*',faAnyFile,SR)=0 then begin
      repeat
        if (length(SR.Name)>0) and (SR.Name[1]<>'.') then begin
          NewItem:=ListView.Items.Add;
          NewItem.Caption:=SR.Name;
          SHGetFileInfo(PChar(VerzName+SR.Name),0,Info,SizeOf(TSHFileInfo),SHGFI_SYSIconIndex or SHGFI_TYPENAME);
          NewItem.ImageIndex:=Info.IIcon;
          NewItem.SubItems.Add(Info.szTypeName);
        end;
      until FindNext(SR)<>0;
      FindClose(SR);
    end;
  end;
  MainForm.ListView.Items.EndUpdate;
end;
Wenn du das hast, musst du einfach noch SHGetFileInfo anpassen (nur die Extension und ich glaub, du musst noch einen Parameter am schluss mir OR hinzufügen)
Jabber: littleDave@jabber.org
in case of 1 is 0 do external raise while in public class of object array else repeat until 1 is 0
  Mit Zitat antworten Zitat