Conseguir el icono asociado de una extensión de archivo


Este artículo presenta una función que puede utilizar para obtener los asociados icono de un archivo o documento basado en su extensión de archivo (es decir, no importa si el archivo o documento existe en el disco o no)
ExtractAssociatedIcon
Para obtener el icono de una aplicación o documento podemos utilizar esta función de API (declarado en el ShellAPI unidad):
función ExtractAssociatedIcon(hInst: HINST lpIconPath: PChar
& nbsp & nbsp var lpiIcon: Word): HICON stdcall

hInst: La aplicación de la manija. Este valor está contenido en la variable predefinida HInstance.
lpIconPath: Un puntero a un búfer de caracteres que debe contener una cadena terminada en null con el nombre completo de la ruta de la aplicación, de la biblioteca (DLL) o un documento. Si es un documento, la función tendrá lugar la ruta de acceso completa de la aplicación asociada de donde el icono fue extraído, por lo que debemos asignar un búfer lo suficientemente grande.
lpiIcon: El índice de icono (el primer icono del archivo tiene un índice de 0). Si lpIconPath especifica un documento y, a continuación lpiIcon se establece por la función (que es la razón por la que se pasa por referencia) a la posición de índice del icono real tomado de la ejecutables asociados (definido en el archivo de la asociación).
valor de Retorno: Si la función falla, devuelve 0. Si tiene éxito, devuelve un icono de manejar, que es un valor entero que Windows utiliza para identificar los asignados los recursos. No es necesario llamar a la API de DestroyIcon a soltar el icono, ya que va a ser desasignado automáticamente cuando la aplicación termine, aunque puede hacerlo si lo desea.
LLAMADA de EJEMPLO
Ahora, ¿qué hacemos con el icono de manejar? Normalmente lo que queremos es un icono, es decir, de la instancia y de la TIcon clase. Todo lo que tenemos que hacer es crear un TIcon objeto y asignar este identificador para Manejar su propiedad. Si más tarde se le asigna el Identificador de la propiedad a otro valor, el icono anterior será automáticamente publicado. Lo mismo sucede si el TIcon objeto es liberado.
este es un ejemplo de que cambia el icono de la forma:
utiliza SysUtils, Windows, ShellAPI
& nbsp & nbsp procedure TForm1.Button1Click(Sender: TObject)
& nbsp & nbsp var
& nbsp & nbsp & nbsp & nbsp IconIndex: word
& nbsp & nbsp & nbsp & nbsp Buffer: array[0..2048] of char
& nbsp & nbsp & nbsp & nbsp IconHandle: HIcon
& nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp StrCopy(@Buffer, 'C:/Windows/Help/Windows.hlp')
& nbsp & nbsp & nbsp & nbsp IconIndex := 0
& nbsp & nbsp & nbsp & nbsp IconHandle := ExtractAssociatedIcon(HInstance, Buffer, IconIndex)
& nbsp & nbsp & nbsp & nbsp si IconHandle <> 0 then
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Icono.Identificador := IconHandle
& nbsp & nbsp final

GETASSOCIATEDICON
Desafortunadamente, ExtractAssociatedIcon se produce un error si el archivo no existe en el disco, por lo que hemos definido un procedimiento que obtiene el icono de un archivo si existe o no, y también puede obtener el icono pequeño (ideal para un TListView que pueden ser mostrados en vsIcon o vsReport de estilos de vista). El procedimiento recibe tres parámetros: el nombre de archivo y dos punteros a HICON (entero) variables: uno para el gran icono (32x32) y otro para el pequeño icono (16x16). Cualquiera de ellos puede ser nulo si usted no necesita uno de estos iconos. Los iconos de 'devuelto' por el procedimiento debe ser liberado con la DestroyIcon de la API. Esto se hará automáticamente si se asigna el icono de la manija (HICON) para el Mango de la propiedad de un TIcon objeto (el icono se dará a conocer cuando este objeto se libera o se asigna un nuevo valor a la misma).
utiliza SysUtils, el Registro de Windows, ShellAPI
& nbsp & nbsp tipo de
& nbsp & nbsp & nbsp & nbsp PHICON = ^HICON
& nbsp & nbsp procedimiento GetAssociatedIcon(nombre de archivo: TFilename
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp PLargeIcon, PSmallIcon: PHICON)
& nbsp & nbsp // Obtiene los iconos de un archivo
& nbsp & nbsp var
& nbsp & nbsp & nbsp & nbsp IconIndex: palabra // Posición del icono en el archivo
& nbsp & nbsp & nbsp & nbsp Extarchivo, FileType: string
& nbsp & nbsp & nbsp & nbsp Reg: TRegistry
& nbsp & nbsp & nbsp & nbsp p: integer
& nbsp & nbsp & nbsp & nbsp p1, p2: pchar
& nbsp & nbsp etiqueta
& nbsp & nbsp & nbsp & nbsp noassoc
& nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp IconIndex := 0
& nbsp & nbsp & nbsp & nbsp // Obtener la extensión del archivo
& nbsp & nbsp & nbsp & nbsp Extarchivo := Mayúsculas(ExtractFileExt(FileName)))
& nbsp & nbsp & nbsp & nbsp if ((Extarchivo <> '.EXE') y (Extarchivo <> '.ICO')) o
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp no FileExists(nombre de archivo), a continuación, empezar
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp // Si el archivo es un EXE o ICO y existe, entonces
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp // vamos a extraer el icono de este archivo. De lo contrario,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp // aquí vamos a tratar de encontrar el icono asociado en la
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp // Registro de Windows...
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Reg := nil
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp probar
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Reg := TRegistry.Crear(KEY_QUERY_VALUE)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Reg.RootKey := HKEY_CLASSES_ROOT
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si Extarchivo = '.EXE', a continuación, Extarchivo := '.COM'
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si Reg.OpenKeyReadOnly(Extarchivo), a continuación,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp probar
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp FileType := Reg.ReadString(')
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp finalmente

& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Reg.CloseKey
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si (Tipo de archivo <> ') y Reg.OpenKeyReadOnly(
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Tipo de archivo '/DefaultIcon'), a continuación,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp probar
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp FileName := Reg.ReadString(')
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp finalmente
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Reg.CloseKey
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp finalmente
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Reg.Libre
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp // Si no hemos podido encontrar la asociación, vamos
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp // tratar de conseguir los iconos por defecto
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si FileName = 'then goto noassoc
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp // Obtener el nombre de archivo y el icono de índice de la
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp / asociación (de forma'filaname',index')
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp p1 := PChar(nombre de archivo)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp p2 := StrRScan(p1, ',')
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si p2 <> nil then begin
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp p := p2 - p1 1 // Posición de la coma
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp IconIndex := StrToInt(Copia(nombre de archivo, p 1,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Longitud(nombre de archivo) - p))
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp SetLength(nombre de archivo, p - 1)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp // Intento de conseguir el icono
& nbsp & nbsp & nbsp & nbsp si ExtractIconEx(pchar(nombre de archivo), IconIndex
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp PLargeIcon^, PSmallIcon^, 1) <> 1 y
& nbsp & nbsp & nbsp & nbsp empezar
noassoc:
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp // error en La operación o el archivo no tenía asociado
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp // icono. Trate de conseguir los iconos por defecto de SHELL32.DLL
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp try // para obtener la ubicación de SHELL32.DLL
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp FileName := IncludeTrailingBackslash(GetSystemDir)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp 'SHELL32.DLL'
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp excepto
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp nombre de archivo := 'C:/WINDOWS/SYSTEM/SHELL32.DLL'
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp // Determinar el icono por defecto de la extensión de archivo
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si (Extarchivo = '.DOC'), a continuación, IconIndex := 1
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp else if (Extarchivo = '.EXE')
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp o (Extarchivo = '.COM'), a continuación, IconIndex := 2
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp else if (Extarchivo = '.HLP) entonces IconIndex := 23
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp else if (Extarchivo = '.INI')
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp o (Extarchivo = '.INF'), a continuación, IconIndex := 63
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp else if (Extarchivo = '.TXT'), a continuación, IconIndex := 64
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp else if (Extarchivo = '.El MURCIÉLAGO'), a continuación, IconIndex := 65
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp else if (Extarchivo = '.DLL')
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp o (Extarchivo = '.SYS')
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp o (Extarchivo = '.VBX')
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp o (Extarchivo = '.OCX')
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp o (Extarchivo = '.VXD'), IconIndex := 66
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp else if (Extarchivo = '.FON'), a continuación, IconIndex := 67
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp else if (Extarchivo = '.TTF'), a continuación, IconIndex := 68
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp else if (Extarchivo = '.FOT'), a continuación, IconIndex := 69
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp demás IconIndex := 0
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp // Intento de conseguir el icono.
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si ExtractIconEx(pchar(nombre de archivo), IconIndex
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp PLargeIcon^, PSmallIcon^, 1) <> 1 y
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp // no se pudo obtener el icono. Sólo el 'retorno' de los ceros.
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si PLargeIcon <> nil entonces PLargeIcon^ := 0
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si PSmallIcon <> nil entonces PSmallIcon^ := 0
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp final

LLAMADA de EJEMPLO
en Este ejemplo se va a cambiar el icono de la forma:
procedure TForm1.Button1Click(Sender: TObject)
& nbsp & nbsp var
& nbsp & nbsp & nbsp & nbsp SmallIcon: HICON
& nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp GetAssociatedIcon('file.doc', nil, @SmallIcon)
& nbsp & nbsp & nbsp & nbsp si SmallIcon <> 0 then
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Icono.Identificador := SmallIcon
& nbsp & nbsp final









Conseguir el icono asociado de una extension de archivo


Conseguir el icono asociado de una extension de archivo : Multi-millones de consejos para hacer su vida mas facil.


Este articulo presenta una funcion que puede utilizar para obtener los asociados icono de un archivo o documento basado en su extension de archivo (es decir, no importa si el archivo o documento existe en el disco o no)
ExtractAssociatedIcon
Para obtener el icono de una aplicacion o documento podemos utilizar esta funcion de API (declarado en el ShellAPI unidad):
funcion ExtractAssociatedIcon(hInst: HINST lpIconPath: PChar
& nbsp & nbsp var lpiIcon: Word): HICON stdcall

hInst: La aplicacion de la manija. Este valor esta contenido en la variable predefinida HInstance.
lpIconPath: Un puntero a un bufer de caracteres que debe contener una cadena terminada en null con el nombre completo de la ruta de la aplicacion, de la biblioteca (DLL) o un documento. Si es un documento, la funcion tendra lugar la ruta de acceso completa de la aplicacion asociada de donde el icono fue extraido, por lo que debemos asignar un bufer lo suficientemente grande.
lpiIcon: El indice de icono (el primer icono del archivo tiene un indice de 0). Si lpIconPath especifica un documento y, a continuacion lpiIcon se establece por la funcion (que es la razon por la que se pasa por referencia) a la posicion de indice del icono real tomado de la ejecutables asociados (definido en el archivo de la asociacion).
valor de Retorno: Si la funcion falla, devuelve 0. Si tiene exito, devuelve un icono de manejar, que es un valor entero que Windows utiliza para identificar los asignados los recursos. No es necesario llamar a la API de DestroyIcon a soltar el icono, ya que va a ser desasignado automaticamente cuando la aplicacion termine, aunque puede hacerlo si lo desea.
LLAMADA de EJEMPLO
Ahora, ¿que hacemos con el icono de manejar? Normalmente lo que queremos es un icono, es decir, de la instancia y de la TIcon clase. Todo lo que tenemos que hacer es crear un TIcon objeto y asignar este identificador para Manejar su propiedad. Si mas tarde se le asigna el Identificador de la propiedad a otro valor, el icono anterior sera automaticamente publicado. Lo mismo sucede si el TIcon objeto es liberado.
este es un ejemplo de que cambia el icono de la forma:
utiliza SysUtils, Windows, ShellAPI
& nbsp & nbsp procedure TForm1.Button1Click(Sender: TObject)
& nbsp & nbsp var
& nbsp & nbsp & nbsp & nbsp IconIndex: word
& nbsp & nbsp & nbsp & nbsp Buffer: array[0..2048] of char
& nbsp & nbsp & nbsp & nbsp IconHandle: HIcon
& nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp StrCopy(@Buffer, 'C:/Windows/Help/Windows.hlp')
& nbsp & nbsp & nbsp & nbsp IconIndex := 0
& nbsp & nbsp & nbsp & nbsp IconHandle := ExtractAssociatedIcon(HInstance, Buffer, IconIndex)
& nbsp & nbsp & nbsp & nbsp si IconHandle <> 0 then
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Icono.Identificador := IconHandle
& nbsp & nbsp final

GETASSOCIATEDICON
Desafortunadamente, ExtractAssociatedIcon se produce un error si el archivo no existe en el disco, por lo que hemos definido un procedimiento que obtiene el icono de un archivo si existe o no, y tambien puede obtener el icono pequeño (ideal para un TListView que pueden ser mostrados en vsIcon o vsReport de estilos de vista). El procedimiento recibe tres parametros: el nombre de archivo y dos punteros a HICON (entero) variables: uno para el gran icono (32x32) y otro para el pequeño icono (16x16). Cualquiera de ellos puede ser nulo si usted no necesita uno de estos iconos. Los iconos de 'devuelto' por el procedimiento debe ser liberado con la DestroyIcon de la API. Esto se hara automaticamente si se asigna el icono de la manija (HICON) para el Mango de la propiedad de un TIcon objeto (el icono se dara a conocer cuando este objeto se libera o se asigna un nuevo valor a la misma).
utiliza SysUtils, el Registro de Windows, ShellAPI
& nbsp & nbsp tipo de
& nbsp & nbsp & nbsp & nbsp PHICON = ^HICON
& nbsp & nbsp procedimiento GetAssociatedIcon(nombre de archivo: TFilename
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp PLargeIcon, PSmallIcon: PHICON)
& nbsp & nbsp // Obtiene los iconos de un archivo
& nbsp & nbsp var
& nbsp & nbsp & nbsp & nbsp IconIndex: palabra // Posicion del icono en el archivo
& nbsp & nbsp & nbsp & nbsp Extarchivo, FileType: string
& nbsp & nbsp & nbsp & nbsp Reg: TRegistry
& nbsp & nbsp & nbsp & nbsp p: integer
& nbsp & nbsp & nbsp & nbsp p1, p2: pchar
& nbsp & nbsp etiqueta
& nbsp & nbsp & nbsp & nbsp noassoc
& nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp IconIndex := 0
& nbsp & nbsp & nbsp & nbsp // Obtener la extension del archivo
& nbsp & nbsp & nbsp & nbsp Extarchivo := Mayusculas(ExtractFileExt(FileName)))
& nbsp & nbsp & nbsp & nbsp if ((Extarchivo <> '.EXE') y (Extarchivo <> '.ICO')) o
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp no FileExists(nombre de archivo), a continuacion, empezar
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp // Si el archivo es un EXE o ICO y existe, entonces
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp // vamos a extraer el icono de este archivo. De lo contrario,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp // aqui vamos a tratar de encontrar el icono asociado en la
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp // Registro de Windows...
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Reg := nil
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp probar
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Reg := TRegistry.Crear(KEY_QUERY_VALUE)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Reg.RootKey := HKEY_CLASSES_ROOT
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si Extarchivo = '.EXE', a continuacion, Extarchivo := '.COM'
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si Reg.OpenKeyReadOnly(Extarchivo), a continuacion,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp probar
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp FileType := Reg.ReadString(')
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp finalmente

& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Reg.CloseKey
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si (Tipo de archivo <> ') y Reg.OpenKeyReadOnly(
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Tipo de archivo '/DefaultIcon'), a continuacion,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp probar
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp FileName := Reg.ReadString(')
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp finalmente
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Reg.CloseKey
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp finalmente
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Reg.Libre
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp // Si no hemos podido encontrar la asociacion, vamos
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp // tratar de conseguir los iconos por defecto
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si FileName = 'then goto noassoc
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp // Obtener el nombre de archivo y el icono de indice de la
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp / asociacion (de forma'filaname',index')
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp p1 := PChar(nombre de archivo)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp p2 := StrRScan(p1, ',')
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si p2 <> nil then begin
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp p := p2 - p1 1 // Posicion de la coma
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp IconIndex := StrToInt(Copia(nombre de archivo, p 1,
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Longitud(nombre de archivo) - p))
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp SetLength(nombre de archivo, p - 1)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp // Intento de conseguir el icono
& nbsp & nbsp & nbsp & nbsp si ExtractIconEx(pchar(nombre de archivo), IconIndex
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp PLargeIcon^, PSmallIcon^, 1) <> 1 y
& nbsp & nbsp & nbsp & nbsp empezar
noassoc:
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp // error en La operacion o el archivo no tenia asociado
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp // icono. Trate de conseguir los iconos por defecto de SHELL32.DLL
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp try // para obtener la ubicacion de SHELL32.DLL
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp FileName := IncludeTrailingBackslash(GetSystemDir)
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp 'SHELL32.DLL'
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp excepto
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp nombre de archivo := 'C:/WINDOWS/SYSTEM/SHELL32.DLL'
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp // Determinar el icono por defecto de la extension de archivo
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si (Extarchivo = '.DOC'), a continuacion, IconIndex := 1
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp else if (Extarchivo = '.EXE')
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp o (Extarchivo = '.COM'), a continuacion, IconIndex := 2
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp else if (Extarchivo = '.HLP) entonces IconIndex := 23
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp else if (Extarchivo = '.INI')
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp o (Extarchivo = '.INF'), a continuacion, IconIndex := 63
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp else if (Extarchivo = '.TXT'), a continuacion, IconIndex := 64
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp else if (Extarchivo = '.El MURCIELAGO'), a continuacion, IconIndex := 65
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp else if (Extarchivo = '.DLL')
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp o (Extarchivo = '.SYS')
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp o (Extarchivo = '.VBX')
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp o (Extarchivo = '.OCX')
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp o (Extarchivo = '.VXD'), IconIndex := 66
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp else if (Extarchivo = '.FON'), a continuacion, IconIndex := 67
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp else if (Extarchivo = '.TTF'), a continuacion, IconIndex := 68
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp else if (Extarchivo = '.FOT'), a continuacion, IconIndex := 69
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp demas IconIndex := 0
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp // Intento de conseguir el icono.
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si ExtractIconEx(pchar(nombre de archivo), IconIndex
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp PLargeIcon^, PSmallIcon^, 1) <> 1 y
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp // no se pudo obtener el icono. Solo el 'retorno' de los ceros.
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si PLargeIcon <> nil entonces PLargeIcon^ := 0
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp & nbsp si PSmallIcon <> nil entonces PSmallIcon^ := 0
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp & nbsp & nbsp final
& nbsp & nbsp final

LLAMADA de EJEMPLO
en Este ejemplo se va a cambiar el icono de la forma:
procedure TForm1.Button1Click(Sender: TObject)
& nbsp & nbsp var
& nbsp & nbsp & nbsp & nbsp SmallIcon: HICON
& nbsp & nbsp empezar
& nbsp & nbsp & nbsp & nbsp GetAssociatedIcon('file.doc', nil, @SmallIcon)
& nbsp & nbsp & nbsp & nbsp si SmallIcon <> 0 then
& nbsp & nbsp & nbsp & nbsp & nbsp & nbsp Icono.Identificador := SmallIcon
& nbsp & nbsp final


Conseguir el icono asociado de una extensión de archivo

Conseguir el icono asociado de una extensión de archivo : Multi-millones de consejos para hacer su vida más fácil.
Recommander aux amis
  • gplus
  • pinterest

Comentario

Dejar un comentario

Clasificación