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

La incrustación de archivos como recursos en un delphi ejecutable : Multi-millones de consejos para hacer su vida más fácil.
Recommander aux amis
  • gplus
  • pinterest

Comentario

Dejar un comentario

Clasificación