请问各位高手,谁知道怎么制作安装文件,就是一个exe,然后这个exe包含多个文件在里面,也就是说,用stream把他们放在setup.exe的后面,然后读出来的时候找好文件流的位置.最好有源码!不胜感激! 先做一个释放的1.exe再做一个管理用的2.exe 用把文件向1.exe 后面添加...我马上要走了 25号回来,再给你代码 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 要制作安装文件为什么不用installshield for delphi?即能做出exe,又能包含多个文件在里面,而却又不需要编程,根本不遥源码,不是很方便吗? 通过资源的方式把想安装的文件写到EXE文件中 —— 不用多说了吧 我有这方面的源程序,需要的话就个E_mail。 能不能发给小弟一个[email protected] 先做一个_X.exe,这个文件会释放文件然后做一个编译程序,这个程序可以将一些资源文件加到_X.exe后面,注意在增加资源后别忘了将文件的列表放进去哦,然后保存到X.exe文件中就行了。好了,这个时候可以设计_X.exe了,在程序启动的时候将自己读入到流中,从尾巴开始,读取文件列表,然后根据文件列表的纪录,分别读取文件生成文件。这就是单个安装程序的设计,当然可以加上角加密和压缩,可以扩充文件列表的结构哦。 SUNON,我也想要一份源程序!谢谢[email protected] SUNON,我也想要一份源程序!最好给我点说明。谢谢 [email protected] 一个流的例子!希望对你有用! 我们经常看到一些电子贺卡之类的制作软件,可以让你自己选择图片,然后它会生成一个EXE可执行文件给你。打开贺卡时就会一边放音乐一边显示出图片来。现在学了流操作之后,我们也可以做一个了。 添加图片过程我们可以直接用前面的Cjt_AddtoFile,而现在要做的是如何把图像读出并显示。我们用前面的Cjt_LoadFromFile先把图片读出来保存为文件再调入也是可以的,但是还有更简单的方法,就是直接把文件流读出来显示,有了流这个利器,一切都变的简单了。 现在的图片比较流行的是BMP格式和JPG格式。我们现在就针对这两种图片写出读取并显示函数。Function Cjt_BmpLoad(ImgBmp:TImage;SourceFile:String):Boolean;var Source:TFileStream; MyFileSize:integer;beginSource:=TFileStream.Create(SourceFile,fmOpenRead or fmShareDenyNone);trytrySource.Seek(-sizeof(MyFileSize),soFromEnd);Source.ReadBuffer(MyFileSize,sizeof(MyFileSize));//读出资源Source.Seek(-MyFileSize,soFromEnd);//定位到资源开始位置ImgBmp.Picture.Bitmap.LoadFromStream(Source);finallySource.Free;end;exceptResult:=False;Exit;end;Result:=True;end; 上面是读出BMP图片的,下面的是读出JPG图片的函数,因为要用到JPG单元,所以要在程序中添加一句:uses jpeg。Function Cjt_JpgLoad(JpgImg:Timage;SourceFile:String):Boolean;var Source:TFileStream;MyFileSize:integer; Myjpg: TJpegImage;begintryMyjpg:= TJpegImage.Create;Source:=TFileStream.Create(SourceFile,fmOpenRead or fmShareDenyNone);trySource.Seek(-sizeof(MyFileSize),soFromEnd);Source.ReadBuffer(MyFileSize,sizeof(MyFileSize));Source.Seek(-MyFileSize,soFromEnd);Myjpg.LoadFromStream(Source);JpgImg.Picture.Bitmap.Assign(Myjpg);finallySource.Free;Myjpg.free;end;exceptResult:=false;Exit;end;Result:=true;end; 有了这两个函数,我们就可以制作读出程序了。下面我们以BMP图片为例: 运行Delphi,新建一个工程,放上一个显示图像控件Image1。在窗口的Create事件中写上一句就可以了: Cjt_BmpLoad(Image1,Application.ExeName); 这个就是头文件了,然后我们用前面的方法生成一个head.res资源文件。下面就可以开始制作我们的添加程序了。全部代码如下:unit Unit1;interfaceuses 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;varRes : TResourceStream;begintryRes := TResourceStream.Create(Hinstance, Resname, Pchar(ResType));tryRes.SavetoFile(ResNewName);Result:=true;finallyRes.Free;end;exceptResult:=false;end;end;Function TForm1.Cjt_AddtoFile(SourceFile,TargetFile:string):Boolean;varTarget,Source:TFileStream;MyFileSize:integer;begintrySource:=TFileStream.Create(SourceFile,fmOpenRead or fmShareExclusive);Target:=TFileStream.Create(TargetFile,fmOpenWrite or fmShareExclusive);tryTarget.Seek(0,soFromEnd);//往尾部添加资源Target.CopyFrom(Source,0);MyFileSize:=Source.Size+Sizeof(MyFileSize);//计算资源大小,并写入辅程尾部Target.WriteBuffer(MyFileSize,sizeof(MyFileSize));finallyTarget.Free;Source.Free;end;exceptResult:=False;Exit;end;Result:=True;end;procedure TForm1.FormCreate(Sender: TObject);beginCaption:='Bmp2Exe演示程序.作者:陈经韬';Edit1.Text:='';OpenPictureDialog1.DefaultExt := GraphicExtension(TBitmap);OpenPictureDialog1.Filter := GraphicFilter(TBitmap);Button1.Caption:='选择BMP图片';Button2.Caption:='生成EXE';end;procedure TForm1.Button1Click(Sender: TObject);beginif OpenPictureDialog1.Execute then Edit1.Text:=OpenPictureDialog1.FileName;end;procedure TForm1.Button2Click(Sender: TObject);var HeadTemp:String;beginif FileExists(Edit1.Text) then begin Application.MessageBox('BMP图片文件不存在,请重新选择!','信息',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. 怎么样?很神奇吧:)把程序界面弄的漂亮点,再添加一些功能,你会发现比起那些要注册的软件来也不会逊多少吧。 在线等待,急 Delphi2007没有代码编辑全屏功能? 求助一段算法 将一个*.wav加入EXE文件可以了,但是将一个*.mpeg的文件做成一个exe文件应该怎样做啊? 急求:判断一Edit1中的Text是否全是数字(既字符串是否代表的是整数值) 对象赋值赋的是什么? 100分,提问两个关于SQLServer的问题。 directorylistbox控件操作 问一小问题! 我想要http://mysite/myexe.exe?user=xxx,可以吗?我的数据如果是post的又如何呢? 遇到一个数学问题! 如何停止递归搜索的过程?
[email protected]
然后做一个编译程序,这个程序可以将一些资源文件加到_X.exe后面,
注意在增加资源后别忘了将文件的列表放进去哦,然后保存到X.exe文
件中就行了。
好了,这个时候可以设计_X.exe了,在程序启动的时候将自己读入到流
中,从尾巴开始,读取文件列表,然后根据文件列表的纪录,分别读取
文件生成文件。
这就是单个安装程序的设计,当然可以加上角加密和压缩,可以扩充
文件列表的结构哦。
[email protected]
SUNON,我也想要一份源程序!最好给我点说明。谢谢
[email protected]
它会生成一个EXE可执行文件给你。打开贺卡时就会一边放音乐一边显示出图片来。
现在学了流操作之后,我们也可以做一个了。
添加图片过程我们可以直接用前面的Cjt_AddtoFile,而现在要做的是如何把
图像读出并显示。我们用前面的Cjt_LoadFromFile先把图片读出来保存为文件再
调入也是可以的,但是还有更简单的方法,就是直接把文件流读出来显示,有了
流这个利器,一切都变的简单了。
现在的图片比较流行的是BMP格式和JPG格式。我们现在就针对这两种图片写
出读取并显示函数。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图片的函数,因为要用到JPG单元,所
以要在程序中添加一句: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;
有了这两个函数,我们就可以制作读出程序了。下面我们以BMP图片为例:
运行Delphi,新建一个工程,放上一个显示图像控件Image1。在窗口的Create
事件中写上一句就可以了:
Cjt_BmpLoad(Image1,Application.ExeName);
这个就是头文件了,然后我们用前面的方法生成一个head.res资源文件。
下面就可以开始制作我们的添加程序了。全部代码如下:
unit Unit1;interfaceuses
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);//计算资源大小,并写入辅程尾部
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演示程序.作者:陈经韬';
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图片文件不存在,请重新选择!','信息',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.
怎么样?很神奇吧:)把程序界面弄的漂亮点,再添加一些功能,你会发现比
起那些要注册的软件来也不会逊多少吧。