![]() |
extraer un icono
Hola, a ver si podeis ayudarme.
Quiero extraer el icono de un acceso directo y ponerlo en un TSpeedButton, como puedo hacer que no se vea la flecha esa que tiene el icono del acceso directo?? Es que queda muy fea. Gracias anticipadas. |
Pueba a sacar el icono directamente de la aplicación a la que apunte ese acceso directo.
|
Gracias por la informacion, pero, me podrias decir como obtengo la direccion de destino? Si le doy la direccion del lnk, como hago para que me saque la del exe al que apunta.
Gracias |
La direccion del exe al que apunta la tienes en el propio icono. Si pulsas con el boton derecho del raton y seleccionas Propiedades, te aparece una pestaña en la que pone la UBICACION del programa al que apunta.
|
A ver te explico lo que quiero hacer exactamente:
Tengo un TSpeedButton y quiero que en el Glyph me aparezca el icono. Yo le doy la ruta del acceso directo, pero el icono aparece con un recuadro blanco por detras muy feo, asi que me gustaria o que se quitase ese recuadro, o que saliera el icono del exe al que apunta. Como se lo digo al boton? Gracias |
Eso es otra cosa.
OK. Puedes añadir un Timage a tu formulario y capturar en el el icono que quieres para tu boton: Código:
procedure TForm1.FormCreate(Sender: TObject); |
Gracias otra vez, pero...
Si yo no se la direccion del .exe al que apunta el .lnk como hago para sacarla? Te explico, yo quiero poner en : Icon.handle:= ExtractAssociatedIcon( hInstance, Pchar(ruta), IconIndex); Pero la ruta que le doy es la del .lnk y yo quiero que me busque el la del .exe. He descubierto que con un OpenDialog eso lo hace directamente, cuando abro la ventana y elijo el acceso directo que quiero el mismo en el Filename me pone la ruta del ejecutable. Quiero hacer eso en codigo, para no tener que utilizar el OpenDialog que no lo quiero para nada. Gracias de antemano |
Hola otra vez,
He estado mirando el Windows y he visto que con la interfaz IShellLink podría sacar los atributos de un acceso directo, y he pensado que quiza asi podria obtener la ruta a la que apunta para poder extraer el icono de ella, pero no se como utilizarla exactamente. Gracias por anticipado |
Hola Gemma,
Creo que esto es lo que necesitas ... unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ShlObj, StdCtrls, ExtCtrls, ActiveX ; type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; CD: TOpenDialog; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public AccesoDirecto : IShellLink; end; var Form1: TForm1; const IID_IPersistFile : TGUID = ( D1:$0000010B;D2:$0000;D3:$0000; D4: ($C0,$00,$00,$00,$00,$00,$00,$46)); implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin CoInitialize( Nil ); CoCreateInstance( CLSID_ShellLink, Nil, CLSCTX_INPROC_SERVER, IID_IShellLinkA, AccesoDirecto ); end; procedure TForm1.Button1Click(Sender: TObject); var PF : IPersistFile; parametro : array[0..MAX_PATH] of char; Visualization : integer; Datos : TWin32FindData; begin Cd.Title := 'Seleccione el acceso directo a abrir'; Cd.Filter := 'Accesos directos (*.lnk)|*.lnk'; if cd.execute then begin AccesoDirecto.QueryInterface( IID_IPersistFile, PF ); PF.Load( StringToOleStr( Cd.FileName ), 0 ); AccesoDirecto.GetPath( Parametro, MAX_PATH, Datos, 0 ); edit1.text := Parametro; end; end; end. Espero que te funcione. Saludos al foro. |
Bueno, veo que te respondieron antes... pero como tuve que recopilar código para darte una respuesta, te la voy a pasar de todos modos.
El tema es así, yo tengo una Unit con todas las funciones, procedimientos y tipos relacionados con "Accesos directos" y otras cosas, en este código puedes ver la función GetLinkFileInfo que extrae información de un ShortCut: Código:
unit XXXX; La implementación de estas funciones podría ser esta: Código:
unit Unit1; Saludos! |
Muchisimas gracias a todos por vuestra ayuda. Ya lo tengo solucionado.
|
La franja horaria es GMT +2. Ahora son las 02:14:27. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi