Ver Mensaje Individual
  #6  
Antiguo 11-10-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Según se indica en el truco citado de trucomanía, ExtractAssociatedIcon tendrá la desventaja de que debe aplicarse sobre un archivo existente.

Partiendo de ahí, me he tomado la libertad de hacer otra función, basada sólo 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;

La usaríamos, por ejemplo, así:

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

o bien

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

si queremos el icono pequeño.

// Saludos

Última edición por roman fecha: 11-10-2006 a las 22:27:44.
Responder Con Cita