Sign in Join
Wiki copytemporary

Lazarus Resources/es: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11Los archivos de recursos contienen información que debe ser compilada en el archivo exe. Esos datos pueden ser imágenes, tablas de cadenas, la información de versión, ... incluso un manifiesto Windows XP y formularios. Con ello se incluyen datos que el programador puede recuperar en su código (acceso a los mismos como si fuesen archivos). El uso de recursos puede ser útil si quiere distribuir ejecutables autónomos .
22
33En las versiones previas a la 2.4 de FPC no era posible utilizar los recursos "normales", archivos de recursos (*. res), en Lazarus, ya que son específicos de win32. Si queremos utilizar los recursos de todos modos, tendremos que volver a crearlos con **lazres**. Lazres se encuentra en el directorio de herramientas de la carpeta de instalación de Lazarus (tal vez antes haya que compilarlo).
44
55   Ahora ya podemos compilar archivos de recursos de Lazarus (***.lrs**) desde la línea de ordenes. La sintaxis para lazres es:
66
7-`lazres <nombre del archivo de recursos> <archivo1 (archivo2 archivo3 ...)>`
7+```text
8+lazres <nombre del archivo de recursos> <archivo1 (archivo2 archivo3 ...)>
9+```
810
911Por Ejemplo:
1012
11-`lazres mirecursolazarus.lrs un_icono.ico`
13+```text
14+lazres mirecursolazarus.lrs un_icono.ico
15+```
1216
1317   Para utilizar un archivo de recursos de Lazarus en tus proyectos incluye el archivo correspondiente con la directiva del compilador \$I en la sección de inicio (**initialization**) de la unidad.
1418
1519   Puedes acceder a los datos de los recursos con el método **LoadFromLazarusResource** de los objetos que contendrán los contenidos de los archivos. LoadFromLazarusResource necesita un parámetro de cadena que indica qué objeto debe ser cargado desde el archivo de recursos.
1620
1721Ejemplo:
1822
1923``` pascal
2024 ...
2125 procedure ejemploproc;
2226 var
2327 icono: TIcon;
2428 begin
2529 icono := TIcon.Create;
2630 icono.LoadFromLazarusResource('un_icono');
2731 end;
2832
2933 initialization
3034 {$I mirecursolazarus.lrs}
3135 ...
3236```
3337
3438   Mediante *{\$I mirecursolazarus.lrs}* incluimos el archivo *mirecursolazarus.lrs* en la unidad compilada. En el procedimiento *ejemploproc* creamos la variable *icono* de tipo *TIcon* y cargamos en ella el objeto de nombre "un_icono" del archivo de recursos. El archivo que compiló en el archivo de recursos fue probablemente el de nombre *un_icono.ico*.
3539
3640   Todas las clases que se derivan de *TGraphic* contienen el procedimiento *LoadFromLazarusResource*.
3741
3842## El archivo de recursos Lazarus del formulario
3943
4044   Lazarus genera un archivo *.lrs* del archivo de formulario *.lfm*. Pero no lo hace de forma automática si no existe el archivo *.lrs*; en esta situación FPC dará al compilar un mensaje como este: ''ERROR: unidad001.pas(24,4) Fatal: Can't open include file "unidad001.lrs".
4145
4246   Para solucionarlo podemos utilizar *lazres*: *(LazarusDir)\tools\lazres unidad001.lrs unidad001.lfm*. En linux: *~\$ lazres unidad001.lrs unidad001.lfm*.
4347
4448   La forma más sencilla de rehacer un archivo .lrs es realizar un cambio trivial en el diseño del formulario, deshacerlo y guardar el formulario; así no necesitaremos recurrir a lazres. Vincent 09:47, 6 enero 2009 (CET)
4549
4650## Obtener los datos en bruto de un recurso lrs
4751
4852   Puedes recuperar los datos de un recurso tal como se muestra en este código:
4953
5054``` pascal
5155 uses ...LResources...;
5256
5357 ...
5458 procedure TForm1.FormCreate(Sender: TObject);
5559 var
5660 r: TLResource;
5761 Datos: String;
5862 begin
5963 r:=LazarusResources.Find('archivoDatos1');
6064 if r=nil then raise Exception.Create('No existe el recurso archivoDatos1');
6165 Datos:=r.Value;
6266 ...procesar los datos...
6367 end;
6468```
6569
6670# Recursos FPC
6771
6872   A partir de FPC 2.4 se puede utilizar archivos estándar .rc (script de recursos) y .res (compilado de recursos)en tu proyecto para incluir los recursos. Para convertir la secuencia de comandos del archivo .rc usado en el código fuente en un recurso binario (archivo .res), FPC ejecuta el compilador externos adecuado para los recursos (windres o GoRC). Por lo tanto el compilador de recursos tiene que estar instalado y presente en la variable de entorno PATH.
6973
7074   Para simplificar el proceso de compilación, es posible utilizar únicamente los recursos compilados en los archivos .res. Puedes precompilar los recursos con cualquier compilador de recursos disponible -windres (disponible en sistemas Unix y Windows), GoRC (sólo Windows), compilador de recursos de Microsoft (rc.exe, incluido en Visual Studio), compilador de recursos Borland (Brcc32.exe, incluido en Delphi, C++ Builder o productos RAD Studio) o cualquier otro.
7175
7276   Utiliza las directivas {\$R nombreArchivo.rc} o {\$R nombreArchivo.res} para incluir un archivo de recursos en el ejecutable. FPC RTL ofrece dos funciones de bajo nivel, así como clases de alto nivel para acceder a los recursos.
7377
7478   Las funciones de bajo nivel son:
7579
7680- EnumResourceTypes
7781- EnumResourceNames
7882- EnumResourceLanguages
7983- FindResource
8084- FindResourceEx
8185- LoadResource
8286- SizeofResource
8387- LockResource
8488- UnlockResource
8589- FreeResource
8690
8791   Son compatibles con las funciones API de Windows: \[<http://msdn.microsoft.com/en-us/library/ff468902(VS.85>).aspx\]
8892
8993   La clase principal que se utiliza para trabajar con los recursos es TResourceStream. La LCL la utiliza para cargar *bitmaps* incrustados, iconos y los formularios. Mira TGraphic.LoadFromResourceID o TIcon.LoadFromResourceHandle para ver cómo se utilizan dentro de la LCL.
9094
9195## Añadir recursos a tu programa
9296
9397   Vamos a revisar la situación cuando necesitas almacenar ciertos datos dentro de tu ejecutable y durante la ejecución del programa se desea extraer estos datos del mismo.
9498
9599   En primer lugar tenemos que indicar al compilador qué archivos queremos incluir en el recurso. Esto lo hacemos en un archivo .rc (secuencia de comandos de recursos):    Archivo MisDatos.rc:
96100
97101
98102 <nowiki> MISDATOS RCDATA "misdatos.dat"</nowiki>
99103
100104   Donde MISDATOS es el nombre del recurso, RCDATA es el tipo del recurso ( ver <http://msdn.microsoft.com/en-us/library/ms648009(VS.85>).aspx para la explicación de los posibles tipos) y "misdatos.dat" es tu archivo de datos.
101105
102106   Vamos a indicar al compilador que incluya el recurso en el proyecto:
103107
104108``` pascal
105109 program misdatos;
106110
107111 {$R MisDatos.rc}
108112 begin
109113 end.
110114```
111115
112116   Silenciosamente, el compilador FPC indica ahora al compilador de recursos distribuidos con FPC a leer el guión .rc para compilar tus archivos de datos en un archivo binario .res de recursos. El enlazador entonces incluirá este en el ejecutable. Aunque esto es transparente para el programador, puedes, si lo deseas, crear su propio archivo .res con, por ejemplo el compilador de recursos de Borland. Ene ste caso, en lugar de utilizar
113117
114118``` pascal
115119 {$R MisDatos.rc}
116120```
117121
118122habrá que utilizar
119123
120124``` pascal
121125 {$R MisDatos.res}
122126```
123127
124128.
125129
126130## Usar los recursos en tu programa
127131
128132   Ahora vamos a extraer los recursos alamecandos en un archivo, v.g. misdatos.dat:
129133
130134``` pascal
131135 program mydata;
132136 uses
133137 SysUtils;
134138 {$R misdatos.res}
135139 var
136140 S: TResourceStream;
137141 F: TFileStream;
138142 begin
139143 // crear un flujo derecursos que apunta al recurso
140144 S := TResourceStream.Create(HInstance, 'MISDATOS', 'RT_RCDATA');
141145 try
142146 // crear el archivo misdatos.dat en el directorio de la aplicación
143147 F := TFileStream.Create(ExtractFilePath(ParamStr(0)) + 'misdatos.dat', fmCreate);
144148 try
145149 F.CopyFrom(S, S.Size); // copiar los datos desde el flujo de recurso al flujo de archivo
146150 finally
147151 F.Free; // liberar el flujo de archivo
148152 end;
149153 finally
150154 S.Free; // liberar el flujo del recurso
151155 end;
152156 end.
153157```
154158
155159---
156160*From the Free Pascal wiki, page "Lazarus Resources/es", as it stood on 2020-02-18 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*
157161Category: Castellano
158162Category: Español

Back to history