Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Obtener el icono de Windows dado una extensión (https://www.clubdelphi.com/foros/showthread.php?t=55822)

David 28-04-2008 16:54:47

Obtener el icono de Windows dado una extensión
 
Hola

En nuestro windows, cada vez que aplicamos una extensión, nos da un icono correspondiente, y sino tiene icono por ser una extensión no reconocida, pues nos da siempre el icono ese de windows que no corresponde a ningún programa en concreto.

El caso es que dado una extensión dada, me gustaria recuperar el icono, así pues sería una función que devuelve un componente TIcon, para dibujar el icono en otra parte.

Atención, sólo tengo la extensión no el archivo, no me valdría para nada la función ExtractAssociatedIcon, pues esta devuelve un icono a partir de un archivo situado en el disco duro, pero lo que yo tengo es una DBGrid con un campo, Files, que contiene el nombre de cada archivo, eje. Rutas.doc, Planos.pdf, Balance.xls, etc...

Estoy buscando por internet y lo mejor que he visto por ahora es esto

http://www.jpgriffiths.com/tutorial/...iatedicon.html

pero no me vale, porque la función no devuelve un icon sino un string y además, no contempla sólo las extensiones sino que vuelve a la función de la Api ExtractAssociatedIcon, que realmente no me sirve.

Un saludo

roman 28-04-2008 17:05:55

Usa la función ShGetFileInfo. En este hilo puedes ver más detalles y hay incluso un ejemplo.

// Saludos

David 28-04-2008 17:37:23

Veo el ejemplo para un TListView, con este código:

Código Delphi [-]
const
  shgfiIconIndex = SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES;
var
  ShFileInfo: TShFileInfo;
begin
  ShGetFileInfo(PChar(FName), 0, ShFileInfo, SizeOf(ShFileInfo), shgfiIconIndex);

El caso es que no sé aún donde poner el icono, si en TImage o en un Grid, pero si me gustaría que la función me devolviera un TIcon.

He hecho esto, pero no me ha funcionado.

Código Delphi [-]
function TForm1.ObtenerIcono(Archivo:String):hIcon;
const
  shgfiIconIndex = SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES;
var
  ShFileInfo: TShFileInfo;
begin
  ShGetFileInfo(PChar(FName), 0, ShFileInfo, SizeOf(ShFileInfo), shgfiIconIndex);
  Result := ShFileInfo.hIcon;
end;

// luego llamo a la función así
produre TForm1.btnClick();
var
 icono : hIcon;
begin
icono := ObtenerIcono('Archivo.pdf'); // o el nombre que sea
 Image1.Picture.Icon.Handle := icono; // Image1 es un TImage.
end;

Pero en el TImage, no se dibuja nada, sería interesante recuperar el icono como imagen bitmat or TIcon o de las dos maneras.

Un saludo

roman 28-04-2008 18:00:26

En lugar de

Código Delphi [-]
const
  shgfiIconIndex = SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES;

usa
Código Delphi [-]
const
  shgfiIconIndex = SHGFI_ICON or SHGFI_USEFILEATTRIBUTES;

// Saludos


La franja horaria es GMT +2. Ahora son las 00:13:33.

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