Sign in Join
Wiki copytemporary

Lazarus Resources/es: what changed

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

Title: Lazarus Resources/es

OldNewLine
1+Los 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 .
2+
3+En 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).
4+
5+   Ahora ya podemos compilar archivos de recursos de Lazarus (***.lrs**) desde la línea de ordenes. La sintaxis para lazres es:
6+
7+`lazres <nombre del archivo de recursos> <archivo1 (archivo2 archivo3 ...)>`
8+
9+Por Ejemplo:
10+
11+`lazres mirecursolazarus.lrs un_icono.ico`
12+
13+   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.
14+
15+   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.
16+
17+Ejemplo:
18+
19+``` pascal
20+ ...
21+ procedure ejemploproc;
22+ var
23+ icono: TIcon;
24+ begin
25+ icono := TIcon.Create;
26+ icono.LoadFromLazarusResource('un_icono');
27+ end;
28+
29+ initialization
30+ {$I mirecursolazarus.lrs}
31+ ...
32+```
33+
34+   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*.
35+
36+   Todas las clases que se derivan de *TGraphic* contienen el procedimiento *LoadFromLazarusResource*.
37+
38+## El archivo de recursos Lazarus del formulario
39+
40+   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".
41+
42+   Para solucionarlo podemos utilizar *lazres*: *(LazarusDir)\tools\lazres unidad001.lrs unidad001.lfm*. En linux: *~\$ lazres unidad001.lrs unidad001.lfm*.
43+
44+   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)
45+
46+## Obtener los datos en bruto de un recurso lrs
47+
48+   Puedes recuperar los datos de un recurso tal como se muestra en este código:
49+
50+``` pascal
51+ uses ...LResources...;
52+
53+ ...
54+ procedure TForm1.FormCreate(Sender: TObject);
55+ var
56+ r: TLResource;
57+ Datos: String;
58+ begin
59+ r:=LazarusResources.Find('archivoDatos1');
60+ if r=nil then raise Exception.Create('No existe el recurso archivoDatos1');
61+ Datos:=r.Value;
62+ ...procesar los datos...
63+ end;
64+```
65+
66+# Recursos FPC
67+
68+   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.
69+
70+   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.
71+
72+   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.
73+
74+   Las funciones de bajo nivel son:
75+
76+- EnumResourceTypes
77+- EnumResourceNames
78+- EnumResourceLanguages
79+- FindResource
80+- FindResourceEx
81+- LoadResource
82+- SizeofResource
83+- LockResource
84+- UnlockResource
85+- FreeResource
86+
87+   Son compatibles con las funciones API de Windows: \[<http://msdn.microsoft.com/en-us/library/ff468902(VS.85>).aspx\]
88+
89+   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.
90+
91+## Añadir recursos a tu programa
92+
93+   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.
94+
95+   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:
96+
97+
98+ <nowiki> MISDATOS RCDATA "misdatos.dat"</nowiki>
99+
100+   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.
101+
102+   Vamos a indicar al compilador que incluya el recurso en el proyecto:
103+
104+``` pascal
105+ program misdatos;
106+
107+ {$R MisDatos.rc}
108+ begin
109+ end.
110+```
111+
112+   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
113+
114+``` pascal
115+ {$R MisDatos.rc}
116+```
117+
118+habrá que utilizar
119+
120+``` pascal
121+ {$R MisDatos.res}
122+```
123+
124+.
125+
126+## Usar los recursos en tu programa
127+
128+   Ahora vamos a extraer los recursos alamecandos en un archivo, v.g. misdatos.dat:
129+
130+``` pascal
131+ program mydata;
132+ uses
133+ SysUtils;
134+ {$R misdatos.res}
135+ var
136+ S: TResourceStream;
137+ F: TFileStream;
138+ begin
139+ // crear un flujo derecursos que apunta al recurso
140+ S := TResourceStream.Create(HInstance, 'MISDATOS', 'RT_RCDATA');
141+ try
142+ // crear el archivo misdatos.dat en el directorio de la aplicación
143+ F := TFileStream.Create(ExtractFilePath(ParamStr(0)) + 'misdatos.dat', fmCreate);
144+ try
145+ F.CopyFrom(S, S.Size); // copiar los datos desde el flujo de recurso al flujo de archivo
146+ finally
147+ F.Free; // liberar el flujo de archivo
148+ end;
149+ finally
150+ S.Free; // liberar el flujo del recurso
151+ end;
152+ end.
153+```
154+
155+---
156+*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).*
157+Category: Castellano
158+Category: Español

Back to history