3. Application pratique 2 : Utiliser des flux pour créer des cartes de vœux électroniques exécutables
On voit souvent des logiciels de création de cartes électroniques qui vous permettent de choisir vous-même les images, puis
Il générera un fichier exécutable EXE pour vous. Lorsque vous ouvrez la carte de vœux, l'image s'affichera pendant la lecture de musique.
Maintenant que nous avons appris les opérations de flux, nous pouvons également en créer une.
Dans le processus d'ajout d'images, nous pouvons utiliser directement le précédent Cjt_AddtoFile, et ce que nous devons faire maintenant, c'est comment
L'image est lue et affichée. Nous utilisons le précédent Cjt_LoadFromFile pour lire l'image et l'enregistrer sous forme de fichier.
Il est également possible de transférer, mais il existe un moyen plus simple, qui consiste à lire directement le flux du fichier et à l'afficher avec.
Avec cet outil puissant, tout devient plus simple.
Les images les plus populaires de nos jours sont le format BMP et le format JPG. Nous allons maintenant parler de ces deux types d'images
Quittez la fonction de lecture et d'affichage.
Fonction Cjt_BmpLoad(ImgBmp:TImage;SourceFile:String):Boolean;
var
Source : TFileStream ;
MyFileSize:entier;
commencer
Source:=TFileStream.Create(SourceFile,fmOpenRead ou fmShareDenyNone);
essayer
essayer
Source.Seek(-sizeof(MyFileSize),soFromEnd);
Source.ReadBuffer(MyFileSize,sizeof(MyFileSize));//Lire les ressources
Source.Seek(-MyFileSize,soFromEnd);//Localiser la position de départ de la ressource
ImgBmp.Picture.Bitmap.LoadFromStream(Source);
enfin
Source.Gratuit ;
fin;
sauf
Résultat :=Faux ;
Sortie;
fin;
Résultat :=Vrai ;
fin;
Ce qui précède est une fonction pour lire les images BMP, et ce qui suit est une fonction pour lire les images JPG. Parce que les unités JPG sont utilisées, donc.
Pour ajouter une phrase au programme : utilise jpeg.
Fonction Cjt_JpgLoad(JpgImg:Timage;SourceFile:String):Boolean;
var
Source : TFileStream ;
MyFileSize:entier;
Monjpg : TJpegImage ;
commencer
essayer
Monjpg := TJpegImage.Create ;
Source:=TFileStream.Create(SourceFile,fmOpenRead ou fmShareDenyNone);
essayer
Source.Seek(-sizeof(MyFileSize),soFromEnd);
Source.ReadBuffer(MyFileSize,sizeof(MyFileSize));
Source.Seek(-MyFileSize,soFromEnd);
Monjpg.LoadFromStream(Source);
JpgImg.Picture.Bitmap.Assign(Monjpg);
enfin
Source.Gratuit ;
Monjpg.free;
fin;
sauf
Résultat :=faux ;
Sortie;
fin;
Résultat :=vrai ;
fin;
Avec ces deux fonctions, nous pouvons réaliser un programme de lecture. Prenons l'exemple des photos BMP :
Exécutez Delphi, créez un nouveau projet et placez un contrôle d'affichage d'image Image1. Créer dans la fenêtre
Écrivez simplement une phrase dans l'événement :
Cjt_BmpLoad(Image1,application.ExeName);
Il s'agit du fichier d'en-tête, puis nous utilisons la méthode précédente pour générer un fichier de ressources head.res.
Nous pouvons maintenant commencer à créer notre programme complémentaire. Le code complet est le suivant :
unité Unité1 ;
interface
utilise
Windows, messages, SysUtils, classes, graphiques, contrôles, formulaires, boîtes de dialogue,
ExtCtrls, StdCtrls, ExtDlgs ;
taper
TForm1 = classe(TForm)
Edit1 : TEdit ;
Bouton1 : TButton ;
Bouton2 : TButton ;
OpenPictureDialog1 : TOpenPictureDialog ;
PRocédure FormCreate(Expéditeur : TObject);
procédure Button1Click (Expéditeur : TObject);
procédure Button2Click (Expéditeur : TObject);
privé
Fonction ExtractRes(ResType, ResName, ResNewName : String):boolean;
Fonction Cjt_AddtoFile(SourceFile,TargetFile:string):Boolean;
{Déclarations privées}
publique
{Déclarations publiques}
fin;
var
Formulaire1 : TForm1 ;
mise en œuvre
{$R *.DFM}
Fonction TForm1.ExtractRes(ResType, ResName, ResNewName : String):boolean;
var
Res : TResourceStream;
commencer
essayer
Res := TResourceStream.Create(Hinstance, Resname, Pchar(ResType));
essayer
Res.SavetoFile(ResNewName);
Résultat :=vrai ;
enfin
Res.Libre ;
fin;
sauf
Résultat :=faux ;
fin;
fin;
Fonction TForm1.Cjt_AddtoFile(SourceFile,TargetFile:string):Boolean;
var
Cible, Source : TFileStream ;
MyFileSize:entier;
commencer
essayer
Source:=TFileStream.Create(SourceFile,fmOpenRead ou fmShareExclusive);
Target:=TFileStream.Create(TargetFile,fmOpenWrite ou fmShareExclusive);
essayer
Target.Seek(0,soFromEnd);//Ajouter des ressources à la fin
Target.CopyFrom(Source,0);
MyFileSize:=Source.Size+Sizeof(MyFileSize);//Calculez la taille de la ressource et écrivez-la à la fin du processus auxiliaire
Target.WriteBuffer(MyFileSize,sizeof(MyFileSize));
enfin
Cible.Gratuit ;
Source.Gratuit ;
fin;
sauf
Résultat :=Faux ;
Sortie;
fin;
Résultat :=Vrai ;
fin;
procédure TForm1.FormCreate(Expéditeur : TObject);
commencer
Caption:='Programme de démonstration Bmp2Exe Auteur : Chen Jingtao';
Edit1.Text:=';
OpenPictureDialog1.DefaultExt := GraphicExtension(TBitmap);
OpenPictureDialog1.Filter := GraphicFilter(TBitmap);
Button1.Caption:='Sélectionner une image BMP';
Button2.Caption:='Générer EXE';
fin;
procédure TForm1.Button1Click(Expéditeur : TObject);
commencer
si OpenPictureDialog1.Execute alors
Edit1.Text:=OpenPictureDialog1.FileName;
fin;
procédure TForm1.Button2Click(Expéditeur : TObject);
var
HeadTemp : Chaîne ;
commencer
si FileExists (Edit1.Text) alors
commencer
Application.MessageBox('Le fichier image BMP n'existe pas, veuillez sélectionner à nouveau !','Message',MB_ICONINFORMATION+MB_OK)
Sortie;
fin;
HeadTemp:=ChangeFileExt(Edit1.Text,'.exe');
si ExtractRes('exefile','head',HeadTemp) alors
si Cjt_AddtoFile(Edit1.Text,HeadTemp) alors
Application.MessageBox('Fichier EXE généré avec succès !','Message',MB_ICONINFORMATION+MB_OK)
autre
commencer
si FileExists(HeadTemp) alors DeleteFile(HeadTemp);
Application.MessageBox('La génération du fichier EXE a échoué !','Message',MB_ICONINFORMATION+MB_OK)
fin;
fin;
fin.
Et ça ? C'est incroyable :) Rendez l'interface du programme plus belle et ajoutez quelques fonctions, vous constaterez que c'est mieux que
Ce ne sera pas bien pire que ces logiciels qui doivent être enregistrés.