3. Aplikasi Praktis 2: Menggunakan stream untuk membuat kartu ucapan elektronik yang dapat dieksekusi
Kita sering melihat beberapa software pembuatan e-card yang memungkinkan Anda memilih gambar sendiri, lalu
Ini akan menghasilkan file EXE yang dapat dieksekusi untuk Anda. Saat Anda membuka kartu ucapan, gambar akan ditampilkan saat musik diputar.
Sekarang kita telah mempelajari operasi aliran, kita juga dapat membuatnya.
Dalam proses penambahan gambar kita bisa langsung menggunakan Cjt_AddtoFile yang sebelumnya, dan yang perlu kita lakukan sekarang adalah bagaimana caranya
Gambar dibaca dan ditampilkan. Kami menggunakan Cjt_LoadFromFile sebelumnya untuk membaca gambar dan menyimpannya sebagai file.
Transfer masuk juga dimungkinkan, tetapi ada cara yang lebih sederhana, yaitu dengan langsung membaca aliran file dan menampilkannya
Dengan alat canggih ini, segalanya menjadi lebih mudah.
Gambar yang paling populer saat ini adalah format BMP dan format JPG. Sekarang kami akan menulis tentang kedua jenis gambar ini
Keluar dari fungsi baca dan tampilan.
Fungsi Cjt_BmpLoad(ImgBmp:TImage;SourceFile:String):Boolean;
var
Sumber:TFileStream;
Ukuran File Saya: bilangan bulat;
mulai
Sumber:=TFileStream.Create(SourceFile,fmOpenRead atau fmShareDenyNone);
mencoba
mencoba
Source.Seek(-sizeof(MyFileSize),soFromEnd);
Source.ReadBuffer(MyFileSize,sizeof(MyFileSize));//Baca sumber daya
Source.Seek(-MyFileSize,soFromEnd);//Temukan posisi awal sumber daya
ImgBmp.Picture.Bitmap.LoadFromStream(Sumber);
Akhirnya
Sumber.Gratis;
akhir;
kecuali
Hasil:=Salah;
KELUAR;
akhir;
Hasil:=Benar;
akhir;
Di atas adalah fungsi untuk membaca gambar BMP, dan berikut ini adalah fungsi untuk membaca gambar JPG. Karena yang digunakan adalah JPG
Untuk menambahkan kalimat ke program: menggunakan jpeg.
Fungsi Cjt_JpgLoad(JpgImg:Timage;SourceFile:String):Boolean;
var
Sumber:TFileStream;
Ukuran File Saya: bilangan bulat;
JPG Saya: TJpegImage;
mulai
mencoba
Myjpg:= TJpegImage.Buat;
Sumber:=TFileStream.Create(SourceFile,fmOpenRead atau fmShareDenyNone);
mencoba
Source.Seek(-sizeof(MyFileSize),soFromEnd);
Sumber.ReadBuffer(Ukuran File Saya,ukuran(Ukuran File Saya));
Source.Seek(-MyFileSize,soFromEnd);
Myjpg.LoadFromStream(Sumber);
JpgImg.Picture.Bitmap.Assign(Myjpg);
Akhirnya
Sumber.Gratis;
Myjpg.gratis;
akhir;
kecuali
Hasil:=salah;
KELUAR;
akhir;
Hasil:=benar;
akhir;
Dengan kedua fungsi tersebut, kita dapat membuat program pembacaan. Mari kita ambil gambar BMP sebagai contoh:
Jalankan Delphi, buat proyek baru, dan letakkan kontrol tampilan gambar Image1. Buat di jendela
Tulis saja satu kalimat pada acara tersebut:
Cjt_BmpLoad(Gambar1,aplikasi.ExeName);
Ini adalah file header, dan kemudian kita menggunakan metode sebelumnya untuk menghasilkan file sumber daya head.res.
Sekarang kita bisa mulai membuat program tambahan kita. Seluruh kodenya adalah sebagai berikut:
satuan Unit1;
antarmuka
kegunaan
Windows, Pesan, SysUtils, Kelas, Grafik, Kontrol, Formulir, Dialog,
ExtCtrls, StdCtrls, ExtDlgs;
jenis
TForm1 = kelas(TForm)
Sunting1: TEdit;
Tombol1: Tombol T;
Tombol2: Tombol T;
OpenPictureDialog1: TOpenPictureDialog;
Formulir ProsedurBuat(Pengirim: TObject);
prosedur Button1Click(Pengirim: TObject);
prosedur Button2Click(Pengirim: TObject);
pribadi
Fungsi ExtractRes(ResType, ResName, ResNewName : String):boolean;
Fungsi Cjt_AddtoFile(SourceFile,TargetFile:string):Boolean;
{Deklarasi pribadi}
publik
{Pernyataan publik}
akhir;
var
Formulir1: TForm1;
pelaksanaan
{$R *.DFM}
Fungsi TForm1.ExtractRes(ResType, ResName, ResNewName : String):boolean;
var
Perihal : TResourceStream;
mulai
mencoba
Res := TResourceStream.Create(Petunjuk, Ganti Nama, Pchar(ResType));
mencoba
Res.SavetoFile(ResNewName);
Hasil:=benar;
Akhirnya
Res.Gratis;
akhir;
kecuali
Hasil:=salah;
akhir;
akhir;
Fungsi TForm1.Cjt_AddtoFile(SourceFile,TargetFile:string):Boolean;
var
Target,Sumber:TFileStream;
Ukuran File Saya: bilangan bulat;
mulai
mencoba
Sumber:=TFileStream.Create(SourceFile,fmOpenRead atau fmShareExclusive);
Target:=TFileStream.Create(TargetFile,fmOpenWrite atau fmShareExclusive);
mencoba
Target.Seek(0,soFromEnd);//Tambahkan sumber daya sampai akhir
Target.CopyFrom(Sumber,0);
MyFileSize:=Source.Size+Sizeof(MyFileSize);//Hitung ukuran sumber daya dan tuliskan di akhir proses tambahan
Target.WriteBuffer(Ukuran File Saya,ukuran(Ukuran File Saya));
Akhirnya
Target.Gratis;
Sumber.Gratis;
akhir;
kecuali
Hasil:=Salah;
KELUAR;
akhir;
Hasil:=Benar;
akhir;
prosedur TForm1.FormCreate(Pengirim: TObject);
mulai
Keterangan:='Program demonstrasi Bmp2Exe. Penulis: Chen Jingtao';
Sunting1.Teks:=';
OpenPictureDialog1.DefaultExt := GraphicExtension(TBitmap);
OpenPictureDialog1.Filter := GraphicFilter(TBitmap);
Button1.Caption:='Pilih gambar BMP';
Button2.Caption:='Hasilkan EXE';
akhir;
prosedur TForm1.Button1Click(Pengirim: TObject);
mulai
jika OpenPictureDialog1.Jalankan lalu
Edit1.Teks:=OpenPictureDialog1.NamaFile;
akhir;
procedure TForm1.Button2Click(Pengirim: TObject);
var
Suhu Kepala:String;
mulai
jika FileExists(Edit1.Text) lalu
mulai
Application.MessageBox('File gambar BMP tidak ada, silakan pilih lagi!','Pesan',MB_ICONINFORMATION+MB_OK)
KELUAR;
akhir;
HeadTemp:=ChangeFileExt(Edit1.Teks,'.exe');
jika ExtractRes('exefile','head',HeadTemp) lalu
jika Cjt_AddtoFile(Edit1.Text,HeadTemp) lalu
Application.MessageBox('File EXE berhasil dibuat!','Pesan',MB_ICONINFORMATION+MB_OK)
kalau tidak
mulai
jika FileExists(HeadTemp) maka DeleteFile(HeadTemp);
Application.MessageBox('Pembuatan file EXE gagal!','Pesan',MB_ICONINFORMATION+MB_OK)
akhir;
akhir;
akhir.
Bagaimana dengan itu? Sungguh menakjubkan :) Jadikan antarmuka program lebih indah dan tambahkan beberapa fungsi, Anda akan menemukan bahwa ini lebih baik daripada
Ini tidak akan lebih buruk daripada perangkat lunak yang perlu didaftarkan.