La incrustación de archivos como recursos en un delphi ejecutable
Usted puede aprender cómo crear su propio software para cualquier situación con la excelente Requisitos de Software Desatado. Si usted necesita saber cómo insertar iconos, cursores, cursores animados, mapas de bits, jpeg, imágenes, archivos de sonido, archivos de texto y cualquier otro archivo dentro de un Delphi ejecutable, sólo sigue leyendo!
Incrustación de archivos como recursos en un Delphi ejecutable de
es posible incrustar cualquier tipo de archivo en un archivo ejecutable uso de archivos de recursos (*.RES). Ciertos tipos de recursos son reconocidos por la API y puede ser utilizado directamente. Otros simplemente son tomados como datos binarios y su hasta usted para el uso de ellos. En este artículo vamos a ver ejemplos de ambos tipos.
Para crear el archivo de recursos de empezar con el archivo de código fuente (*.RC), por ejemplo, los RECURSOS con nombre.RC, que es un simple archivo de texto que contiene las entradas de recursos (nombre, clase y archivo):
sample_bmp de mapa de bits de la muestra.bmp
sample_ico ICONO de la muestra.ico
sample_cur CURSOR de la muestra.cur
sample_ani ANICURSOR de la muestra.ani
sample_jpg JPEG sample.jpg
sample_wav de ONDA de la muestra.wav
sample_txt TEXTO sample.txt
los nombres de Los recursos (sample_bmp, sample_ico, etc.) son arbitrarias. El tipo de recursos que puede ser reconocido por el Api (mapa de bits, ICONOS, CURSOR) o arbitrarias (JPEG, de ONDA, de TEXTO). Los nombres de archivo especificar los archivos que se incluirán en el .RES archivo (y más tarde en el .EXE).
Ahora tenemos que compilar el .Archivo RC para producir el .RES archivo. Para que podemos utilizar Borland Compilador de Recursos (brcc32.exe) que usted probablemente puede encontrar en Delphi de la carpeta BIN. Es una simple utilidad de línea de comandos que espera que el nombre del archivo de origen como parámetro:
C:/DELPHI/P0025>brcc32 recursos
Borland Compilador de Recursos de la Versión 5.40
Copyright (c) 1990, 1999 Inprise de la Corporación. Todos los derechos reservados.
C:/DELPHI/P0025>_
Para indicar el enlazador para incrustar el archivo de recursos en el ejecutable, podemos utilizar el archivo de recursos de la directiva ($R o $RECURSO) en nuestro Pascal código uente:
{$R recursos.res}
la Carga de los recursos de la aplicación es fácil para la 'reconocida' de los recursos como de mapa de bits, ICONO y CURSOR desde la API de Windows proporciona las funciones (LoadBitmap, LoadIcon y LoadCursor respectivamente), para obtener las manijas de estos elementos, que, por ejemplo, podemos asignar a la propiedad Handle del objeto correspondiente:
Image1.Imagen.Mapa de bits.Identificador :=
LoadBitmap(hInstance, 'sample_bmp')
Icono.Identificador := LoadIcon(hInstance, 'sample_ico')
la Pantalla.Los cursores[1] := LoadCursor(hInstance, 'sample_cur')
Para obtener más alternativas cuando la carga de recursos de imagen, consulte la API de LoadImage.
Otros recursos son un poco más difíciles de manejar. Vamos a empezar con las imágenes JPEG. La siguiente función se utiliza TResourceStream a cargar el recurso como un arroyo que se cargan en un TJPEGImage objeto:
la función de GetResourceAsJpeg(const resname: string): TJPEGImage
var
Stream: TResourceStream
begin
Stream := TResourceStream.Crear(hInstance, ResName, 'JPEG')
prueba
Resultado := TJPEGImage.Crear
Resultado.LoadFromStream(Stream)
por último
Stream.Gratis
final
final
Ejemplo:
var
Jpg: TJPEGImage
begin
// ...
Jpg := GetResourceAsJpeg('sample_jpg')
Image2.Imagen.Mapa de bits.Asignar(Jpg)
Jpg.Gratis
// ...
final
De los archivos WAV necesitamos un puntero a los recursos cargados en la memoria, y un archivo de texto tenemos que cargar un recurso en una cadena. Podemos hacerlo usando TResourceStream, pero vamos a ver un ejemplo de uso de la API:
la función de GetResourceAsPointer(ResName: pchar ResType: pchar
Tamaño: longword): puntero
var
InfoBlock: HRSRC
GlobalMemoryBlock: HGLOBAL
begin
InfoBlock := FindResource(hInstance, resname, restype)
si InfoBlock = 0, entonces
aumentar la Excepción.Crear(SysErrorMessage(GetLastError))
tamaño := SizeofResource(hInstance, InfoBlock)
si tamaño = 0, entonces
aumentar la Excepción.Crear(SysErrorMessage(GetLastError))
GlobalMemoryBlock := LoadResource(hInstance, InfoBlock)
si GlobalMemoryBlock = 0, entonces
aumentar la Excepción.Crear(SysErrorMessage(GetLastError))
Resultado := LockResource(GlobalMemoryBlock)
si el Resultado = nil then
aumentar la Excepción.Crear(SysErrorMessage(GetLastError))
final
la función de GetResourceAsString(ResName: pchar ResType: pchar): string
var
ResData: PChar
ResSize: Longword
begin
ResData := GetResourceAsPointer(resname, restype, ResSize)
SetString(Resultado, ResData, ResSize)
final
Ejemplo:
var
sample_wav: puntero
procedure TForm1.FormCreate(Sender: TObject)
var
tamaño: longword
begin
...
sample_wav := GetResourceAsPointer('sample_wav', 'la onda', de tamaño)
Memo1.Líneas.Texto := GetResourceAsString('sample_txt', 'texto')
final
una Vez que tenemos la onda de los recursos cargados en la memoria se puede jugar tantas veces como se desee utilizando la API de sndPlaySound declarado en el MMSystem unidad:
procedure TForm1.Button1Click(Sender: TObject)
begin
sndPlaySound(sample_wav, SND_MEMORY o SND_NODEFAULT o SND_ASYNC)
final
Hay algunos recursos (como las fuentes y los cursores animados) que no puede ser utilizado de la memoria. Necesariamente tiene que guardar estos recursos a un archivo de disco temporal de carga y a partir de ahí. La siguiente función guarda un recurso a un archivo:
procedimiento SaveResourceAsFile(const ResName: string ResType: pchar
const FileName: string)
begin
con TResourceStream.Crear(hInstance, ResName, ResType)
prueba
SaveToFile(nombre de archivo)
por último
Libre
final
final
La siguiente función hace uso de la anterior para salvar a un recurso en un archivo temporal:
la función de SaveResourceAsTempFile(const ResName: string
ResType: pchar): string
begin
Resultado := CreateTempFile
SaveResourceAsFile(ResName, ResType, Resultado)
final
La discusión de la función CreateTempFile cae más allá del alcance de este artículo y su aplicación puede verse en el ejemplo adjunto al boletín de noticias.
La siguiente función hace uso de SaveResourceAsTempFile para guardar una película de dibujos animados-cursor de recursos en un archivo temporal, a continuación, se carga el cursor desde el archivo con LoadImage y, finalmente, elimina el archivo temporal. La función devuelve el identificador devuelto por LoadImage:
la función de GetResourceAsAniCursor(const ResName: string): HCursor
var
CursorFile: string
begin
CursorFile := SaveResourceAsTempFile(ResName, 'ANICURSOR')
Resultado := LoadImage(0, PChar(CursorFile), IMAGE_CURSOR, 0,
0, LR_DEFAULTSIZE o LR_LOADFROMFILE)
DeleteFile(CursorFile)
si el Resultado = 0, entonces
aumentar la Excepción.Crear(SysErrorMessage(GetLastError))
final
llamada de Ejemplo:
la Pantalla.Los cursores[1] := GetResourceAsAniCursor('sample_ani')
Form1.Cursor := 1
Bueno, eso es todo. Espero que les sea útil. Usted puede encontrar más información acerca de los archivos de recursos en la Biblioteca de MSDN:
http://msdn.microsoft.com/library/en-us/winui/hh/winui/rc_6cs3.asp
Usted puede encontrar el código fuente completo de este artículo en el archivo que acompaña a la Pascal Boletín #25.
La incrustacion de archivos como recursos en un delphi ejecutable
La incrustacion de archivos como recursos en un delphi ejecutable : Multi-millones de consejos para hacer su vida mas facil.
Usted puede aprender como crear su propio software para cualquier situacion con la excelente Requisitos de Software Desatado. Si usted necesita saber como insertar iconos, cursores, cursores animados, mapas de bits, jpeg, imagenes, archivos de sonido, archivos de texto y cualquier otro archivo dentro de un Delphi ejecutable, solo sigue leyendo!
Incrustacion de archivos como recursos en un Delphi ejecutable de
es posible incrustar cualquier tipo de archivo en un archivo ejecutable uso de archivos de recursos (*.RES). Ciertos tipos de recursos son reconocidos por la API y puede ser utilizado directamente. Otros simplemente son tomados como datos binarios y su hasta usted para el uso de ellos. En este articulo vamos a ver ejemplos de ambos tipos.
Para crear el archivo de recursos de empezar con el archivo de codigo fuente (*.RC), por ejemplo, los RECURSOS con nombre.RC, que es un simple archivo de texto que contiene las entradas de recursos (nombre, clase y archivo):
sample_bmp de mapa de bits de la muestra.bmp
sample_ico ICONO de la muestra.ico
sample_cur CURSOR de la muestra.cur
sample_ani ANICURSOR de la muestra.ani
sample_jpg JPEG sample.jpg
sample_wav de ONDA de la muestra.wav
sample_txt TEXTO sample.txt
los nombres de Los recursos (sample_bmp, sample_ico, etc.) son arbitrarias. El tipo de recursos que puede ser reconocido por el Api (mapa de bits, ICONOS, CURSOR) o arbitrarias (JPEG, de ONDA, de TEXTO). Los nombres de archivo especificar los archivos que se incluiran en el .RES archivo (y mas tarde en el .EXE).
Ahora tenemos que compilar el .Archivo RC para producir el .RES archivo. Para que podemos utilizar Borland Compilador de Recursos (brcc32.exe) que usted probablemente puede encontrar en Delphi de la carpeta BIN. Es una simple utilidad de linea de comandos que espera que el nombre del archivo de origen como parametro:
C:/DELPHI/P0025>brcc32 recursos
Borland Compilador de Recursos de la Version 5.40
Copyright (c) 1990, 1999 Inprise de la Corporacion. Todos los derechos reservados.
C:/DELPHI/P0025>_
Para indicar el enlazador para incrustar el archivo de recursos en el ejecutable, podemos utilizar el archivo de recursos de la directiva ($R o $RECURSO) en nuestro Pascal codigo uente:
{$R recursos.res}
la Carga de los recursos de la aplicacion es facil para la 'reconocida' de los recursos como de mapa de bits, ICONO y CURSOR desde la API de Windows proporciona las funciones (LoadBitmap, LoadIcon y LoadCursor respectivamente), para obtener las manijas de estos elementos, que, por ejemplo, podemos asignar a la propiedad Handle del objeto correspondiente:
Image1.Imagen.Mapa de bits.Identificador :=
LoadBitmap(hInstance, 'sample_bmp')
Icono.Identificador := LoadIcon(hInstance, 'sample_ico')
la Pantalla.Los cursores[1] := LoadCursor(hInstance, 'sample_cur')
Para obtener mas alternativas cuando la carga de recursos de imagen, consulte la API de LoadImage.
Otros recursos son un poco mas dificiles de manejar. Vamos a empezar con las imagenes JPEG. La siguiente funcion se utiliza TResourceStream a cargar el recurso como un arroyo que se cargan en un TJPEGImage objeto:
la funcion de GetResourceAsJpeg(const resname: string): TJPEGImage
var
Stream: TResourceStream
begin
Stream := TResourceStream.Crear(hInstance, ResName, 'JPEG')
prueba
Resultado := TJPEGImage.Crear
Resultado.LoadFromStream(Stream)
por ultimo
Stream.Gratis
final
final
Ejemplo:
var
Jpg: TJPEGImage
begin
// ...
Jpg := GetResourceAsJpeg('sample_jpg')
Image2.Imagen.Mapa de bits.Asignar(Jpg)
Jpg.Gratis
// ...
final
De los archivos WAV necesitamos un puntero a los recursos cargados en la memoria, y un archivo de texto tenemos que cargar un recurso en una cadena. Podemos hacerlo usando TResourceStream, pero vamos a ver un ejemplo de uso de la API:
la funcion de GetResourceAsPointer(ResName: pchar ResType: pchar
Tamaño: longword): puntero
var
InfoBlock: HRSRC
GlobalMemoryBlock: HGLOBAL
begin
InfoBlock := FindResource(hInstance, resname, restype)
si InfoBlock = 0, entonces
aumentar la Excepcion.Crear(SysErrorMessage(GetLastError))
tamaño := SizeofResource(hInstance, InfoBlock)
si tamaño = 0, entonces
aumentar la Excepcion.Crear(SysErrorMessage(GetLastError))
GlobalMemoryBlock := LoadResource(hInstance, InfoBlock)
si GlobalMemoryBlock = 0, entonces
aumentar la Excepcion.Crear(SysErrorMessage(GetLastError))
Resultado := LockResource(GlobalMemoryBlock)
si el Resultado = nil then
aumentar la Excepcion.Crear(SysErrorMessage(GetLastError))
final
la funcion de GetResourceAsString(ResName: pchar ResType: pchar): string
var
ResData: PChar
ResSize: Longword
begin
ResData := GetResourceAsPointer(resname, restype, ResSize)
SetString(Resultado, ResData, ResSize)
final
Ejemplo:
var
sample_wav: puntero
procedure TForm1.FormCreate(Sender: TObject)
var
tamaño: longword
begin
...
sample_wav := GetResourceAsPointer('sample_wav', 'la onda', de tamaño)
Memo1.Lineas.Texto := GetResourceAsString('sample_txt', 'texto')
final
una Vez que tenemos la onda de los recursos cargados en la memoria se puede jugar tantas veces como se desee utilizando la API de sndPlaySound declarado en el MMSystem unidad:
procedure TForm1.Button1Click(Sender: TObject)
begin
sndPlaySound(sample_wav, SND_MEMORY o SND_NODEFAULT o SND_ASYNC)
final
Hay algunos recursos (como las fuentes y los cursores animados) que no puede ser utilizado de la memoria. Necesariamente tiene que guardar estos recursos a un archivo de disco temporal de carga y a partir de ahi. La siguiente funcion guarda un recurso a un archivo:
procedimiento SaveResourceAsFile(const ResName: string ResType: pchar
const FileName: string)
begin
con TResourceStream.Crear(hInstance, ResName, ResType)
prueba
SaveToFile(nombre de archivo)
por ultimo
Libre
final
final
La siguiente funcion hace uso de la anterior para salvar a un recurso en un archivo temporal:
la funcion de SaveResourceAsTempFile(const ResName: string
ResType: pchar): string
begin
Resultado := CreateTempFile
SaveResourceAsFile(ResName, ResType, Resultado)
final
La discusion de la funcion CreateTempFile cae mas alla del alcance de este articulo y su aplicacion puede verse en el ejemplo adjunto al boletin de noticias.
La siguiente funcion hace uso de SaveResourceAsTempFile para guardar una pelicula de dibujos animados-cursor de recursos en un archivo temporal, a continuacion, se carga el cursor desde el archivo con LoadImage y, finalmente, elimina el archivo temporal. La funcion devuelve el identificador devuelto por LoadImage:
la funcion de GetResourceAsAniCursor(const ResName: string): HCursor
var
CursorFile: string
begin
CursorFile := SaveResourceAsTempFile(ResName, 'ANICURSOR')
Resultado := LoadImage(0, PChar(CursorFile), IMAGE_CURSOR, 0,
0, LR_DEFAULTSIZE o LR_LOADFROMFILE)
DeleteFile(CursorFile)
si el Resultado = 0, entonces
aumentar la Excepcion.Crear(SysErrorMessage(GetLastError))
final
llamada de Ejemplo:
la Pantalla.Los cursores[1] := GetResourceAsAniCursor('sample_ani')
Form1.Cursor := 1
Bueno, eso es todo. Espero que les sea util. Usted puede encontrar mas informacion acerca de los archivos de recursos en la Biblioteca de MSDN:
http://msdn.microsoft.com/library/en-us/winui/hh/winui/rc_6cs3.asp
Usted puede encontrar el codigo fuente completo de este articulo en el archivo que acompaña a la Pascal Boletin #25.
La incrustación de archivos como recursos en un delphi ejecutable
By Consejos Y Trucos
La incrustación de archivos como recursos en un delphi ejecutable : Multi-millones de consejos para hacer su vida más fácil.