Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Trucos (https://www.clubdelphi.com/foros/forumdisplay.php?f=52)
-   -   Obtener el icono asociado a un archivo (https://www.clubdelphi.com/foros/showthread.php?t=80768)

dec 11-10-2006 21:15:18

Obtener el icono asociado a un archivo
 
Utilizando la función "ExtractAssociatedIcon" convenientemente es posible obtener el icono asociado a un determinado archivo.

El código fuente que a continuación puedes ver lo escribió Domingo Seoane, un estupendo compañero en el ClubDelphi. ¡Saludos!

Código Delphi [-]
uses
  ShellApi;

procedure TForm1.Button1Click(Sender: TObject);
var
  Buffer: array[0..MAX_PATH] of Char;
  Icono: TIcon;
  Index: Word;
begin
  Icono:= TIcon.Create;
  try
    StrCopy(Buffer,PChar('C:\boot.ini'));
    Index:= 0;
    Icono.Handle:= ExtractAssociatedIcon(GetModuleHandle(nil),@Buffer,Index);
    // Aqui dibujo el icono, pero lo podriamos asignar a un Timage.Picture
    Canvas.Draw(0,0,Icono);
  finally
    Icono.Free;
  end;
end;

roman 11-10-2006 22:37:32

Aquí les pongo una variante que obtiene el icono basándose únicamente en la extensión del archivo:

Código Delphi [-]
procedure ExtractIcon(FileExt: String; Icon: TIcon; SmallIcon: Boolean = false);
var
  il: TImageList;
  fi: TShFileInfo;
  flags: Cardinal;
  idx: Integer;

begin
  ShGetFileInfo(
    PChar('.' + FileExt), 0, fi, SizeOf(fi),
    SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES
  );
  idx := fi.iIcon;

  il := TImageList.Create(nil);

  try
    if SmallIcon then flags := SHGFI_SMALLICON else flags := SHGFI_LARGEICON;
    il.Handle := ShGetFileInfo('', 0, fi, SizeOf(fi), SHGFI_SYSICONINDEX or flags);
    il.GetIcon(idx, Icon);
  finally
    il.Free;
  end;
end;

Ejemplos de uso:

Código Delphi [-]
ExtractIcon('jpg', Image1.Picture.Icon);
ExtractIcon('dpr', Image2.Picture.Icon);


La franja horaria es GMT +2. Ahora son las 00:32:58.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi