⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 “流”的利用--可执行电子贺卡.htm

📁 delphi环境下关于“流”的使用,很透彻
💻 HTM
字号:
<HTML><HEAD><TITLE>谈Delphi编程中“流”的利用</TITLE>
<META content=en-us http-equiv=Content-Language>
<META content="text/html; charset=gb2312" http-equiv=Content-Type>
<STYLE>
BODY {BACKGROUND-COLOR: #ffffff; COLOR: #336633; FONT-SIZE: 12px; FONT-WEIGHT: normal; LINE-HEIGHT: 16px; link: #339966; vlink: #339966}
P {FONT-SIZE: 12px; FONT-WEIGHT: normal; LINE-HEIGHT: 150%}
BR {FONT-SIZE: 12px; FONT-WEIGHT: normal; LINE-HEIGHT: 150%}
SELECT {FONT-SIZE: 12px}
FORM {FONT-SIZE: 12px; MARGIN-BOTTOM: 0px}
TD {FONT-SIZE: 12px; LINE-HEIGHT: 150%}
B {FONT-WEIGHT: bold}
A:link {COLOR: #336633}
A:visited {COLOR: #336633}
A:hover {TEXT-DECORATION: underline}
.font12px {FONT-SIZE: 12px; LINE-HEIGHT: 16pt}
</STYLE>
</HEAD>

<BODY>
<DIV align=center>
<CENTER>
<TABLE bgColor=#c8ffc8 border=1 borderColor=#c8ccc8 height="80%" width="93%">
  <TBODY>
  <TR>
    <TD bgColor=#d0ffd0 borderColor=#00ff00 height=16 vAlign=top 
      width=593><FONT color=#306830>&nbsp; 建议分辨率:800X600</FONT></TD></TR>
  <TR>
        <TD bgColor=#f0fff0 borderColor=#f0fff0 height=366 vAlign=top width=593> 
          <p align=center>谈Delphi编程中“流”的利用--可执行电子贺卡</p>
<p align=center>陈经韬</p>
      三、实际应用之二:利用流制作可执行电子贺卡<BR>
          <BR>&nbsp; 
      我们经常看到一些电子贺卡之类的制作软件,可以让你自己选择图片,然后它会生成一个EXE可执行文件给你。打开贺卡时就会一边放音乐一边显示出图片来。现在学了流操作之后,我们也可以做一个了。&nbsp;<BR>&nbsp; 
      添加图片过程我们可以直接用前面的Cjt_AddtoFile,而现在要做的是如何把图像读出并显示。我们用前面的Cjt_LoadFromFile先把图片读出来保存为文件再调入也是可以的,但是还有更简单的方法,就是直接把文件流读出来显示,有了流这个利器,一切都变的简单了。<BR>&nbsp; 
      现在的图片比较流行的是BMP格式和JPG格式。我们现在就针对这两种图片写出读取并显示函数。<BR><BR>Function 
      Cjt_BmpLoad(ImgBmp:TImage;SourceFile:String):Boolean;<BR>var<BR>Source:TFileStream;<BR>MyFileSize:integer;<BR>begin<BR>Source:=TFileStream.Create(SourceFile,fmOpenRead 
      or 
      fmShareDenyNone);<BR>try<BR>try<BR>Source.Seek(-sizeof(MyFileSize),soFromEnd);<BR>Source.ReadBuffer(MyFileSize,sizeof(MyFileSize));//读出资源<BR>Source.Seek(-MyFileSize,soFromEnd);//定位到资源开始位置<BR>ImgBmp.Picture.Bitmap.LoadFromStream(Source);<BR>finally<BR>Source.Free;<BR>end;<BR>except<BR>Result:=False;<BR>Exit;<BR>end;<BR>Result:=True;<BR>end;<BR>&nbsp; 
      上面是读出BMP图片的,下面的是读出JPG图片的函数,因为要用到JPG单元,所以要在程序中添加一句:uses 
      jpeg。<BR><BR>Function 
      Cjt_JpgLoad(JpgImg:Timage;SourceFile:String):Boolean;<BR>var<BR>Source:TFileStream;<BR>MyFileSize:integer;<BR>Myjpg: 
      TJpegImage;<BR>begin<BR>try<BR>Myjpg:= 
      TJpegImage.Create;<BR>Source:=TFileStream.Create(SourceFile,fmOpenRead or 
      fmShareDenyNone);<BR>try<BR>Source.Seek(-sizeof(MyFileSize),soFromEnd);<BR>Source.ReadBuffer(MyFileSize,sizeof(MyFileSize));<BR>Source.Seek(-MyFileSize,soFromEnd);<BR>Myjpg.LoadFromStream(Source);<BR>JpgImg.Picture.Bitmap.Assign(Myjpg);<BR>finally<BR>Source.Free;<BR>Myjpg.free;<BR>end;<BR>except<BR>Result:=false;<BR>Exit;<BR>end;<BR>Result:=true;<BR>end;<BR>&nbsp; 
      有了这两个函数,我们就可以制作读出程序了。下面我们以BMP图片为例:<BR>&nbsp; 
      运行Delphi,新建一个工程,放上一个显示图像控件Image1。在窗口的Create事件中写上一句就可以了:<BR>Cjt_BmpLoad(Image1,Application.ExeName);<BR>&nbsp; 
      这个就是头文件了,然后我们用前面的方法生成一个head.res资源文件。<BR>下面就可以开始制作我们的添加程序了。全部代码如下:<BR>unit 
      Unit1;<BR><BR>interface<BR><BR>uses<BR>Windows, Messages, SysUtils, 
      Classes, Graphics, Controls, Forms, Dialogs,<BR>ExtCtrls, StdCtrls, 
      ExtDlgs;<BR><BR>type<BR>TForm1 = class(TForm)<BR>Edit1: TEdit;<BR>Button1: 
      TButton;<BR>Button2: TButton;<BR>OpenPictureDialog1: 
      TOpenPictureDialog;<BR>procedure FormCreate(Sender: TObject);<BR>procedure 
      Button1Click(Sender: TObject);<BR>procedure Button2Click(Sender: 
      TObject);<BR>private<BR>Function ExtractRes(ResType, ResName, ResNewName : 
      String):boolean;<BR>Function 
      Cjt_AddtoFile(SourceFile,TargetFile:string):Boolean;<BR>{ Private 
      declarations }<BR>public<BR>{ Public declarations 
      }<BR>end;<BR><BR>var<BR>Form1: TForm1;<BR><BR>implementation<BR><BR>{$R 
      *.DFM}<BR>Function TForm1.ExtractRes(ResType, ResName, ResNewName : 
      String):boolean;<BR>var<BR>Res : TResourceStream;<BR>begin<BR>try<BR>Res 
      := TResourceStream.Create(Hinstance, Resname, 
      Pchar(ResType));<BR>try<BR>Res.SavetoFile(ResNewName);<BR>Result:=true;<BR>finally<BR>Res.Free;<BR>end;<BR>except<BR>Result:=false;<BR>end;<BR>end;<BR>Function 
      TForm1.Cjt_AddtoFile(SourceFile,TargetFile:string):Boolean;<BR>var<BR>Target,Source:TFileStream;<BR>MyFileSize:integer;<BR>begin<BR>try<BR>Source:=TFileStream.Create(SourceFile,fmOpenRead 
      or fmShareExclusive);<BR>Target:=TFileStream.Create(TargetFile,fmOpenWrite 
      or 
      fmShareExclusive);<BR>try<BR>Target.Seek(0,soFromEnd);//往尾部添加资源<BR>Target.CopyFrom(Source,0);<BR>MyFileSize:=Source.Size+Sizeof(MyFileSize);//计算资源大小,并写入辅程尾部<BR>Target.WriteBuffer(MyFileSize,sizeof(MyFileSize));<BR>finally<BR>Target.Free;<BR>Source.Free;<BR>end;<BR>except<BR>Result:=False;<BR>Exit;<BR>end;<BR>Result:=True;<BR>end;<BR>procedure 
      TForm1.FormCreate(Sender: 
      TObject);<BR>begin<BR>Caption:='Bmp2Exe演示程序.作者:陈经韬';<BR>Edit1.Text:='';<BR>OpenPictureDialog1.DefaultExt 
      := GraphicExtension(TBitmap);<BR>OpenPictureDialog1.Filter := 
      GraphicFilter(TBitmap);<BR><BR>Button1.Caption:='选择BMP图片';<BR>Button2.Caption:='生成EXE';<BR>end;<BR><BR>procedure 
      TForm1.Button1Click(Sender: TObject);<BR>begin<BR>if 
      OpenPictureDialog1.Execute 
      then<BR>Edit1.Text:=OpenPictureDialog1.FileName;<BR>end;<BR><BR>procedure 
      TForm1.Button2Click(Sender: 
      TObject);<BR>var<BR>HeadTemp:String;<BR>begin<BR>if Not 
      FileExists(Edit1.Text) 
      then<BR>begin<BR>Application.MessageBox('BMP图片文件不存在,请重新选择!','信息',MB_ICONINFORMATION+MB_OK)<BR>Exit;<BR>end;<BR>HeadTemp:=ChangeFileExt(Edit1.Text,'.exe');<BR>if 
      ExtractRes('exefile','head',HeadTemp) then<BR>if 
      Cjt_AddtoFile(Edit1.Text,HeadTemp) 
      then<BR>Application.MessageBox('EXE文件生成成功!','信息',MB_ICONINFORMATION+MB_OK)<BR>else<BR>begin<BR>if 
      FileExists(HeadTemp) then 
      DeleteFile(HeadTemp);<BR>Application.MessageBox('EXE文件生成失败!','信息',MB_ICONINFORMATION+MB_OK)<BR>end;<BR>end;<BR>end.<BR>&nbsp; 
      怎么样?很神奇吧:)把程序界面弄的漂亮点,再添加一些功能,你会发现比起那些要注册的软件来也不会逊多少吧。<BR>-----------------------------------------------------------------------<BR>
        </TD>
      </TR>
  <TR>
    <TD bgColor=#d0ffd0 borderColor=#f0fff0 height=1 vAlign=top 
      width=593>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &copy;CopyRight 
2000</TD></TR></TBODY></TABLE></CENTER></DIV></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -