麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 編程 > Delphi > 正文

動(dòng)態(tài)賀卡EXE生成器---Delphi中流的應(yīng)用(9)

2019-11-18 18:48:25
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

三、實(shí)際應(yīng)用之二:利用流制作可執(zhí)行電子賀卡

    我們經(jīng)常看到一些電子賀卡之類的制作軟件,可以讓你自己選擇圖片,然后
它會(huì)生成一個(gè)EXE可執(zhí)行文件給你。打開賀卡時(shí)就會(huì)一邊放音樂(lè)一邊顯示出圖片來(lái)。
現(xiàn)在學(xué)了流操作之后,我們也可以做一個(gè)了。  
   添加圖片過(guò)程我們可以直接用前面的Cjt_AddtoFile,而現(xiàn)在要做的是如何把
圖像讀出并顯示。我們用前面的Cjt_LoadFromFile先把圖片讀出來(lái)保存為文件再
調(diào)入也是可以的,但是還有更簡(jiǎn)單的方法,就是直接把文件流讀出來(lái)顯示,有了
流這個(gè)利器,一切都變的簡(jiǎn)單了。
    現(xiàn)在的圖片比較流行的是BMP格式和JPG格式。我們現(xiàn)在就針對(duì)這兩種圖片寫
出讀取并顯示函數(shù)。

Function Cjt_BmpLoad(ImgBmp:TImage;SourceFile:String):Boolean;
var
 Source:TFileStream;
 MyFileSize:integer;
begin
Source:=TFileStream.Create(SourceFile,fmOpenRead or fmShareDenyNone);
try
try
Source.Seek(-sizeof(MyFileSize),soFromEnd);
Source.ReadBuffer(MyFileSize,sizeof(MyFileSize));//讀出資源
Source.Seek(-MyFileSize,soFromEnd);//定位到資源開始位置
ImgBmp.Picture.Bitmap.LoadFromStream(Source);
finally
Source.Free;
end;
except
Result:=False;
Exit;
end;
Result:=True;
end;
  上面是讀出BMP圖片的,下面的是讀出JPG圖片的函數(shù),因?yàn)橐玫絁PG單元,所
以要在程序中添加一句:uses jpeg。

Function Cjt_JpgLoad(JpgImg:Timage;SourceFile:String):Boolean;
var
 Source:TFileStream;
MyFileSize:integer;
 Myjpg: TJpegImage;
begin
try
Myjpg:= TJpegImage.Create;
Source:=TFileStream.Create(SourceFile,fmOpenRead or fmShareDenyNone);
try
Source.Seek(-sizeof(MyFileSize),soFromEnd);
Source.ReadBuffer(MyFileSize,sizeof(MyFileSize));
Source.Seek(-MyFileSize,soFromEnd);
Myjpg.LoadFromStream(Source);
JpgImg.Picture.Bitmap.Assign(Myjpg);
finally
Source.Free;
Myjpg.free;
end;
except
Result:=false;
Exit;
end;
Result:=true;
end;
  有了這兩個(gè)函數(shù),我們就可以制作讀出程序了。下面我們以BMP圖片為例:
  運(yùn)行Delphi,新建一個(gè)工程,放上一個(gè)顯示圖像控件Image1。在窗口的Create
事件中寫上一句就可以了:
   Cjt_BmpLoad(Image1,application.ExeName);
  這個(gè)就是頭文件了,然后我們用前面的方法生成一個(gè)head.res資源文件。
下面就可以開始制作我們的添加程序了。全部代碼如下:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, StdCtrls, ExtDlgs;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Button2: TButton;
    OpenPictureDialog1: TOpenPictureDialog;
    PRocedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
  Function ExtractRes(ResType, ResName, ResNewName : String):boolean;
  Function Cjt_AddtoFile(SourceFile,TargetFile:string):Boolean;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}
Function TForm1.ExtractRes(ResType, ResName, ResNewName : String):boolean;
var
Res : TResourceStream;
begin
try
Res := TResourceStream.Create(Hinstance, Resname, Pchar(ResType));
try
Res.SavetoFile(ResNewName);
Result:=true;
finally
Res.Free;
end;
except
Result:=false;
end;
end;
Function TForm1.Cjt_AddtoFile(SourceFile,TargetFile:string):Boolean;
var
Target,Source:TFileStream;
MyFileSize:integer;
begin
try
Source:=TFileStream.Create(SourceFile,fmOpenRead or fmShareExclusive);
Target:=TFileStream.Create(TargetFile,fmOpenWrite or fmShareExclusive);
try
Target.Seek(0,soFromEnd);//往尾部添加資源
Target.CopyFrom(Source,0);
MyFileSize:=Source.Size+Sizeof(MyFileSize);//計(jì)算資源大小,并寫入輔程尾部
Target.WriteBuffer(MyFileSize,sizeof(MyFileSize));
finally
Target.Free;
Source.Free;
end;
except
Result:=False;
Exit;
end;
Result:=True;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Caption:='Bmp2Exe演示程序.作者:陳經(jīng)韜';
Edit1.Text:=';
OpenPictureDialog1.DefaultExt := GraphicExtension(TBitmap);
OpenPictureDialog1.Filter := GraphicFilter(TBitmap);

Button1.Caption:='選擇BMP圖片';
Button2.Caption:='生成EXE';
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenPictureDialog1.Execute then
   Edit1.Text:=OpenPictureDialog1.FileName;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
 HeadTemp:String;
begin
if FileExists(Edit1.Text) then
   begin
    Application.MessageBox('BMP圖片文件不存在,請(qǐng)重新選擇!','信息',MB_ICONINFORMATION+MB_OK)
    Exit;
   end;
 HeadTemp:=ChangeFileExt(Edit1.Text,'.exe');
 if ExtractRes('exefile','head',HeadTemp) then
     if Cjt_AddtoFile(Edit1.Text,HeadTemp) then
         Application.MessageBox('EXE文件生成成功!','信息',MB_ICONINFORMATION+MB_OK)
 else
     begin
      if FileExists(HeadTemp) then DeleteFile(HeadTemp);
      Application.MessageBox('EXE文件生成失敗!','信息',MB_ICONINFORMATION+MB_OK)
     end;
end;
end.
   怎么樣?很神奇吧:)把程序界面弄的漂亮點(diǎn),再添加一些功能,你會(huì)發(fā)現(xiàn)比
起那些要注冊(cè)的軟件來(lái)也不會(huì)遜多少吧。


上一篇:探究:如何判斷Delphi中的對(duì)象指針是否可用

下一篇:截獲Delphi中的異常

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
學(xué)習(xí)交流
熱門圖片

新聞熱點(diǎn)

疑難解答

圖片精選

網(wǎng)友關(guān)注

主站蜘蛛池模板: 99爱国产精品| 毛片一级网站 | 欧美人与牲禽动交精品一区 | 国产精品野外av久久久 | 国产一区二区观看 | 日韩av影片在线观看 | 免费看毛片的网站 | 欧美一区二区精品夜夜嗨 | 中国女人内谢8xxxxxx在 | 高清一区二区在线观看 | 久久久三区 | 欧美a v在线 | 九九热欧美| 91亚洲精品一区二区福利 | 成人在线视频国产 | 亚洲 综合 欧美 动漫 丝袜图 | 日本羞羞影院 | 在线免费小视频 | 久久久久久99 | 久久99精品久久久久久园产越南 | 伊人久久电影网 | 色婷婷久久一区二区 | 99精品欧美一区二区 | 国产精品色综合 | 少妇的肉体2无删减版 | 久久精品23 | 欧美黄一区 | 久久免费观看一级毛片 | 一级毛片在线免费观看 | 九七在线视频 | 亚洲成人中文字幕在线 | 黄色一级片在线免费观看 | 中文字幕欧美一区二区三区 | 久草在线免费看 | 国产日韩在线视频 | 国产一区在线观看视频 | www.7777在线 | 九九热精品在线 | 欧美精品久久久久久久久久 | 美国一级黄色毛片 | 伦一区二区三区中文字幕v亚洲 |