[Lazarus-es] Cambiar icono antes de compilar apliación

Jesus Reyes A. jesusrmx en gmail.com
Dom Jun 19 07:41:00 CEST 2016


En Sat, 18 Jun 2016 20:10:56 -0500, Maximiliano Duarte  
<maximiliano.duarte en gmail.com> escribió:

> Lo que quiere es cambiar el icono en tiempo de ejecución.
> No creo se pueda. Me parece que es parte de la aplicación y no puede ser  
> modificado-----
> De: francisco prieto
> Enviado el: ‎18/‎06/‎2016 11:58
> Para: Spanish version of Lazarus List
> Asunto: Re: [Lazarus-es] Cambiar icono antes de compilar apliación
>
> Antonio,
>
> Se me ocurre que para lo tuyo podes intentar algo asi...
>
> http://www.clubdelphi.com/foros/showthread.php?t=47395
>
> Ojo, el Lazarus tiene un bug y para que te tome correctamente el archivo  
> de recursos tenes que:
> 1-Ejecutar
> 2-Limpiar y Construir
> 3- Dejar tildada solo las opciones Directorio de Salida de Proyecto y  
> Directorio de Fuentes del >Proyecto
> 4- Limpiar y Construir
>
> Cada vez que hagas un cambio en los puntos res, tendras que Limpiar y  
> Construir porque sino te va a >tomar el archivo res anterior.
>
> Pero salvo por eso el archivo de recursos se puede usar sin problemas.
>
> Saludos,
>
> Pancho
> Cordoba
> Argentina  
> El sáb., 18 jun. 2016 a las 10:51, Antonio Évora Ramírez  
> (<aevorar en gmail.com>) escribió:
>>
>> Buenas Maikel.
>>
>> Como tu comentas es como se hace. Pero lo que yo necesito es que si el  
>> modo de compilación es A >>ponga un icono y si el modo de compilación  
>> es B ponga otro icono distinto. Ya lo tengo orquestado >>para el fondo  
>> de la aplicación que cambia en función del modo de compilación pero con  
>> el icono no >>hay manera (o al menos yo no se como). La solución sería  
>> que al compilar usará el icono de la >>aplicación y no el que se cargó  
>> al cargar el proyecto.
>>
>> Espero haberme explicado mejor ;-)
>>
>>

Interesante. Como Antonio ha descubierto los modos de compilación no  
incluyen el apartado de "Recursos" por lo que actualmente esto no es  
posible. Me dí a la tarea de investigarlo y he dado con un método que al  
parecer funciona, intenta los siguientes pasos:

1. Eliminar el icono de la aplicación. Mediante el Menú Proyecto->Opciones  
del proyecto en el apartado "Aplicación" presiona el botón "Quitar Icono",  
Presiona el botón "Aceptar" para guardar los cambios.

2. Preparar Archivo de proyecto para el nuevo recurso. Mediante el Menú  
Proyecto->Ver Fuente Proyecto editar el código del archivo .lpr, donde  
tenemos

{$R *.res}

Editarlo para que quede así (el nombre AppIcon.res es gusto personal):

{$R AppIcon.res}
{$R *.res}

Guardar los cambios.

3. Modificar los modos de construcción.
   (a) Mediante el Menú Proyecto->Opciones del proyecto seleccionar el  
apartado: "Comandos del compilador", en el panel derecho.
   (b) Selecciona el modo de compilación de la lista en la parte superior  
del panel derecho.
   (c) En apartado "Ejecutar antes de" hacer lo siguiente:
     * Desmarcar "Ejecutar", Marcar "Compilar" y "Construir"
     * En "Comando" escribir: x:\ruta\a\windres.exe -i  
x:\ruta\a\AppIconModoA.rc -o AppIcon.res
   (d) Repetir desde (b) para cada modo de compilación existente.
   (e) Presiona el botón "Aceptar" para guardar los cambios.

y con esto cada vez que compiles, el ejecutable deberá tener el icono que  
hayas seleccionado, que icono se usa para cada modo de compilación será  
determinado por los archivos AppIconModoX.rc que deberás crear para cada  
modo. windres.exe lo encuentras en el directorio "bin" de tu instalación  
de FPC, entonces ajusta la ruta de manera que Lazarus lo encuentre.

En mi caso, he creado un directorio "res" dentro del directorio del  
proyecto donde pongo los archivos .ico y .rc, entonces suponiendo que he  
instalado fpc en c:\Users\Jesus\dev\fpc\3.0.0 la línea de comando sería:

	c:\Users\Jesus\dev\fpc\3.0.0\bin\windres.exe -i res\AppIconModoA.rc -o  
AppIcon.res

AppIcon.res debe coincidir con lo especificado en el paso 2.
entonces, solo resta la construcción de cada archivo .rc, es sumamente  
fácil, el contenido es una sola línea de texto, algo así como:

AppIcon ICON "ModoA.ico"

La primer palabra: AppIcon es lo que recomienda FPC  
(http://www.freepascal.org/docs-html/prog/progse63.html#x275-29000013.5),  
pero podría ser un número (ver  
https://msdn.microsoft.com/library/windows/desktop/aa381018), por ejemplo:

0 ICON "ModoA.ico"

La segunda palabra: ICON es requerida para un recurso del tipo icono.

y por último, viene el nombre del archivo que contiene el icono, si  
colocas los archivos .ico, junto a los archivos .rc, no deberían haber  
problemas. No he intentado con otras rutas.

Al parecer el icono de la aplicación será el primero recurso ICON que se  
encuentre (esto último es mas bien una corazonada, no he investigado) pero  
por eso he puesto primero {$R AppIcon.res} que {$R *.res}, esperando que  
sirva en el caso de que la aplicación haga uso de mas iconos.

Aunque esto funciona, en mi caso y como anécdota personal, me ha costado  
un pequeño dolor de cabeza porque a pesar de que acá todo se hacía  
correctamente, la aplicación seguía siendo generada con el icono  
predeterminado. Y es que no se si tenga algo que ver la instalación de  
Turtoise svn y git que se meten con la apariencia de los iconos para  
mostrar el estado de cada archivo y guardarán un cache o que se yo (lo más  
fácil es echarle la culpa a Windows 10, por que no :)), pero después  
usando un editor de recursos me di cuenta de que el icono esta siendo  
incorporado correctamente cada vez, o sí, en efecto algo pasé por alto....

Claro que no es la única solución, seguramente se podrá encontrar en  
Internet alguna aplicación que cambie el icono del ejecutable una vez que  
se haya generado, para eso se tendría que usar el apartado: "Ejecutar  
después de" marcando también "Compilar" y "Construir". Esta alternativa no  
la he probado, pero debería funcionar :)

Bueno, espero que funcione bien para ti, si lo deseas prueba y comenta...

Saludos.

Jesus Reyes A.







More information about the Lazarus-es mailing list