3. Aplicación práctica 2: uso de secuencias para crear tarjetas de felicitación electrónicas ejecutables
A menudo vemos algún software de creación de tarjetas electrónicas que le permite elegir las imágenes usted mismo y luego
Generará un archivo ejecutable EXE para usted. Al abrir la tarjeta de felicitación, se mostrará la imagen mientras se reproduce música.
Ahora que hemos aprendido las operaciones de transmisión, también podemos crear una.
En el proceso de agregar imágenes, podemos usar directamente el Cjt_AddtoFile anterior, y lo que debemos hacer ahora es cómo
La imagen se lee y se muestra. Usamos el Cjt_LoadFromFile anterior para leer la imagen y guardarla como un archivo.
También es posible realizar la transferencia, pero existe una forma más sencilla: leer directamente el flujo del archivo y mostrarlo.
Con esta poderosa herramienta todo se vuelve más fácil.
Las imágenes más populares hoy en día son el formato BMP y el formato JPG. Ahora escribiremos sobre estos dos tipos de imágenes.
Salga de la función de lectura y visualización.
Función Cjt_BmpLoad(ImgBmp:TImage;SourceFile:String):Boolean;
var
Fuente: TFileStream;
TamañoMiArchivo:entero;
comenzar
Fuente:=TFileStream.Create(SourceFile,fmOpenRead o fmShareDenyNone);
intentar
intentar
Source.Seek(-sizeof(MyFileSize),soFromEnd);
Source.ReadBuffer(MyFileSize,sizeof(MyFileSize));//Leer recursos
Source.Seek(-MyFileSize,soFromEnd);//Ubique la posición inicial del recurso
ImgBmp.Picture.Bitmap.LoadFromStream(Fuente);
finalmente
Fuente.Gratis;
fin;
excepto
Resultado:=Falso;
Salida;
fin;
Resultado:=Verdadero;
fin;
Lo anterior es una función para leer imágenes BMP y lo siguiente es una función para leer imágenes JPG. Debido a que se utilizan unidades JPG.
Para agregar una oración al programa: usa jpeg.
Función Cjt_JpgLoad(JpgImg:Timage;SourceFile:String):Booleano;
var
Fuente: TFileStream;
TamañoMiArchivo:entero;
Mijpg: TJpegImage;
comenzar
intentar
Mijpg:= TJpegImage.Create;
Fuente:=TFileStream.Create(SourceFile,fmOpenRead o fmShareDenyNone);
intentar
Source.Seek(-sizeof(MyFileSize),soFromEnd);
Source.ReadBuffer(MyFileSize,sizeof(MyFileSize));
Fuente.Seek(-MyFileSize,soFromEnd);
Myjpg.LoadFromStream(Fuente);
JpgImg.Picture.Bitmap.Assign(Mijpg);
finalmente
Fuente.Gratis;
Mijpg.gratis;
fin;
excepto
Resultado:=falso;
Salida;
fin;
Resultado:=verdadero;
fin;
Con estas dos funciones podemos hacer un programa de lectura. Tomemos fotografías BMP como ejemplo:
Ejecute Delphi, cree un nuevo proyecto y coloque un control de visualización de imágenes Imagen1. Crear en ventana
Solo escribe una oración en el evento:
Cjt_BmpLoad(Imagen1,aplicación.ExeName);
Este es el archivo de encabezado y luego usamos el método anterior para generar un archivo de recursos head.res.
Ahora podemos comenzar a crear nuestro programa complementario. El código completo es el siguiente:
unidad Unidad1;
interfaz
usos
Windows, Mensajes, SysUtils, Clases, Gráficos, Controles, Formularios, Cuadros de diálogo,
ExtCtrls, StdCtrls, ExtDlgs;
tipo
TForm1 = clase(TForm)
Edición1: TEditar;
Botón1: TBotón;
Botón2: TBotón;
OpenPictureDialog1: TOpenPictureDialog;
Procedimiento FormCreate(Remitente: TObject);
procedimiento Button1Click(Remitente: TObject);
procedimiento Button2Click(Remitente: TObject);
privado
Función ExtractRes(ResType, ResName, ResNewName: Cadena):boolean;
Función Cjt_AddtoFile(SourceFile,TargetFile:string):Booleano;
{Declaraciones privadas}
público
{Declaraciones públicas}
fin;
var
Formulario1: TForm1;
implementación
{$R *.DFM}
Función TForm1.ExtractRes(ResType, ResName, ResNewName: Cadena):boolean;
var
Res: TResourceStream;
comenzar
intentar
Res := TResourceStream.Create(Hinstance, Resname, Pchar(ResType));
intentar
Res.SavetoFile(ResNewName);
Resultado:=verdadero;
finalmente
Res.Libre;
fin;
excepto
Resultado:=falso;
fin;
fin;
Función TForm1.Cjt_AddtoFile(SourceFile,TargetFile:string):Boolean;
var
Destino, Fuente: TFileStream;
TamañoMiArchivo:entero;
comenzar
intentar
Fuente:=TFileStream.Create(SourceFile,fmOpenRead o fmShareExclusive);
Destino:=TFileStream.Create(TargetFile,fmOpenWrite o fmShareExclusive);
intentar
Target.Seek(0,soFromEnd);//Agregar recursos al final
Destino.CopyFrom(Fuente,0);
MyFileSize:=Source.Size+Sizeof(MyFileSize);//Calcule el tamaño del recurso y escríbalo al final del proceso auxiliar
Target.WriteBuffer(MyFileSize,sizeof(MyFileSize));
finalmente
Objetivo.Gratis;
Fuente.Gratis;
fin;
excepto
Resultado:=Falso;
Salida;
fin;
Resultado:=Verdadero;
fin;
procedimiento TForm1.FormCreate(Remitente: TObject);
comenzar
Título:='Programa de demostración Bmp2Exe Autor: Chen Jingtao';
Editar1.Texto:=';
OpenPictureDialog1.DefaultExt := GraphicExtension(TBitmap);
OpenPictureDialog1.Filter: = GraphicFilter (TBitmap);
Button1.Caption:='Seleccionar imagen BMP';
Button2.Caption:='Generar EXE';
fin;
procedimiento TForm1.Button1Click(Remitente: TObject);
comenzar
si OpenPictureDialog1.Execute entonces
Edit1.Text:=OpenPictureDialog1.FileName;
fin;
procedimiento TForm1.Button2Click (Remitente: TObject);
var
Temperatura del cabezal: cadena;
comenzar
si FileExists (Edit1.Text) entonces
comenzar
Application.MessageBox('¡El archivo de imagen BMP no existe, selecciónelo nuevamente!','Mensaje',MB_ICONINFORMATION+MB_OK)
Salida;
fin;
HeadTemp:=ChangeFileExt(Edit1.Text,'.exe');
si ExtractRes('exefile','head',HeadTemp) entonces
si Cjt_AddtoFile(Edit1.Text,HeadTemp) entonces
Application.MessageBox('¡El archivo EXE se generó correctamente!','Mensaje',MB_ICONINFORMATION+MB_OK)
demás
comenzar
si FileExists(HeadTemp) entonces DeleteFile(HeadTemp);
Application.MessageBox('¡Falló la generación del archivo EXE!','Mensaje',MB_ICONINFORMATION+MB_OK)
fin;
fin;
fin.
¿Qué tal? Es increíble :) Haga que la interfaz del programa sea más hermosa y agregue algunas funciones, encontrará que es mejor que
No será mucho peor que el software que debe registrarse.