如何把edit的內容保存到程序裏麵 |
尚未結案
|
anzi168hk
一般會員 發表:5 回覆:5 積分:2 註冊:2007-09-05 發送簡訊給我 |
|
syntax
尊榮會員 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
把字打好、打正確
你希望網路上的人怎麼看待你? 一位連字都打不好的人,事情能做得多好?所以給你個建議,不要太懶得選字 TXXXX.Read(@Edit.Text[1], Length(Edit.Text)); 有 Read 函式的元件都可以用 或 var Buf: array of Byte; SetLength(Buf, Length(Edit.Text)); Move(@Edit.Text[1], @Buf[0], Length(Edit.Text)); 或 var Buf: PByte; New(Buf, Length(Edit.Text)); Move(@Edit.Text[1], @Buf[0], Length(Edit.Text)); ===================引 用 anzi168hk 文 章=================== 各位前輩妳們好,如何把edit的內容保存到程序的內存流裏麵 |
qqqufo
一般會員 發表:1 回覆:17 積分:8 註冊:2007-06-01 發送簡訊給我 |
===================引 用 anzi168hk 文 章=================== 各位前輩妳們好,如何把edit的內容保存到程序的內存流裏麵 如下是一个添加应用程序,二进制到程序尾的示例代码。 [code delphi] unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,shellapi; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); resourcestring ts='添加成功,请不要再次执行此程序,否则2.exe会包含多个1.exe!'; var tfs,tff:tfilestream; size:int64; begin try tfs:=tfilestream.Create(getcurrentdir() '\1.exe',fmopenreadwrite); tff:=tfilestream.Create(getcurrentdir() '\2.exe',fmopenreadwrite); tff.Seek(0,sofromend);//这一句很重要,如果放到后面,那么,将把2.exe覆盖掉, tff.CopyFrom(tfs,0); size:=tfs.Size sizeof(size); //tff.Seek(0,sofromend);//如果把前一句放到这里来,那么,就会把2.exe改写为1.exe, tff.Write(size,sizeof(size)); form1.Canvas.TextOut(10,10,ts); finally tfs.Free; tff.Free; end; sleep(2000); application.Terminate; end; procedure TForm1.Button2Click(Sender: TObject); resourcestring entexe='2秒钟后开始执行刚刚释放出来的3.exe文件'; var tfs:tfilestream; tms:tmemorystream; size:int64; begin try tfs:=tfilestream.Create(getcurrentdir() '\2.exe',fmopenreadwrite);; tfs.Seek(-sizeof(size),sofromend); //定位到存放第二个exe文件大小的位置, tfs.ReadBuffer(size,sizeof(size));//把第二个exe文件的大小读出到size中 tfs.Seek(-size,sofromcurrent); //把文件指针定位到第二个exe文件头, tms:=tmemorystream.Create; //创建内存流, tms.CopyFrom(tfs,size);//从文件流tfs的当前位置(第二个exe文件头),拷贝第二个exe文件到内存流中 tms.SaveToFile(getcurrentdir() '\3.exe');//把内存流保存为一个exe文件 finally tfs.Free; tms.Free; end; form1.Canvas.TextOut(10,10,entexe); sleep(2000); shellexecute(form1.Handle,'open',pchar('3.exe'),'-s','',sw_shownormal); end; procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin deletefile('3.exe'); end; end. //这是我仿写的,不太好,但愿能给你一些帮助!![/code] |
anzi168hk
一般會員 發表:5 回覆:5 積分:2 註冊:2007-09-05 發送簡訊給我 |
|
qqqufo
一般會員 發表:1 回覆:17 積分:8 註冊:2007-06-01 發送簡訊給我 |
===================引 用 anzi168hk 文 章=================== 谢谢各位大哥们 我写的是繁体字啊 汗,简体繁体都一样吧,看不清楚吗? 汗,簡體繁體都一樣吧,看不清楚嗎? [code delphi] unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,shellapi; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); resourcestring ts='添加成功,請不要再次執行此程式,否則2.exe會包含多個1.exe!'; var tfs,tff:tfilestream; size:int64; begin try tfs:=tfilestream.Create(getcurrentdir() '\1.exe',fmopenreadwrite); tff:=tfilestream.Create(getcurrentdir() '\2.exe',fmopenreadwrite); tff.Seek(0,sofromend);//這一句很重要,如果放到後面,那麼,將把2.exe覆蓋掉, tff.CopyFrom(tfs,0); size:=tfs.Size sizeof(size); //tff.Seek(0,sofromend);//如果把前一句放到這裡來,那麼,就會把2.exe改寫為1.exe, tff.Write(size,sizeof(size)); form1.Canvas.TextOut(10,10,ts); finally tfs.Free; tff.Free; end; sleep(2000); application.Terminate; end; procedure TForm1.Button2Click(Sender: TObject); resourcestring entexe='2秒鐘後開始執行剛剛釋放出來的3.exe文件'; var tfs:tfilestream; tms:tmemorystream; size:int64; begin try tfs:=tfilestream.Create(getcurrentdir() '\2.exe',fmopenreadwrite);; tfs.Seek(-sizeof(size),sofromend); //定位到存放第二個exe檔大小的位置, tfs.ReadBuffer(size,sizeof(size));//把第二個exe檔的大小讀出到size中 tfs.Seek(-size,sofromcurrent); //把檔指針定位到第二個exe檔頭, tms:=tmemorystream.Create; //創建記憶體流, tms.CopyFrom(tfs,size);//從檔流tfs的當前位置(第二個exe檔頭),拷貝第二個exe檔到記憶體流中 tms.SaveToFile(getcurrentdir() '\3.exe');//把記憶體流保存為一個exe檔 finally tfs.Free; tms.Free; end; form1.Canvas.TextOut(10,10,entexe); sleep(2000); shellexecute(form1.Handle,'open',pchar('3.exe'),'-s','',sw_shownormal); end; procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin deletefile('3.exe'); end; end. //這是我仿寫的,不太好,但願能給你一些幫助!! unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,shellapi; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); resourcestring ts='添加成功,請不要再次執行此程式,否則2.exe會包含多個1.exe!'; var tfs,tff:tfilestream; size:int64; begin try tfs:=tfilestream.Create(getcurrentdir() '\1.exe',fmopenreadwrite); tff:=tfilestream.Create(getcurrentdir() '\2.exe',fmopenreadwrite); tff.Seek(0,sofromend);//這一句很重要,如果放到後面,那麼,將把2.exe覆蓋掉, tff.CopyFrom(tfs,0); size:=tfs.Size sizeof(size); //tff.Seek(0,sofromend);//如果把前一句放到這裡來,那麼,就會把2.exe改寫為1.exe, tff.Write(size,sizeof(size)); form1.Canvas.TextOut(10,10,ts); finally tfs.Free; tff.Free; end; sleep(2000); application.Terminate; end; procedure TForm1.Button2Click(Sender: TObject); resourcestring entexe='2秒鐘後開始執行剛剛釋放出來的3.exe文件'; var tfs:tfilestream; tms:tmemorystream; size:int64; begin try tfs:=tfilestream.Create(getcurrentdir() '\2.exe',fmopenreadwrite);; tfs.Seek(-sizeof(size),sofromend); //定位到存放第二個exe檔大小的位置, tfs.ReadBuffer(size,sizeof(size));//把第二個exe檔的大小讀出到size中 tfs.Seek(-size,sofromcurrent); //把檔指針定位到第二個exe檔頭, tms:=tmemorystream.Create; //創建記憶體流, tms.CopyFrom(tfs,size);//從檔流tfs的當前位置(第二個exe檔頭),拷貝第二個exe檔到記憶體流中 tms.SaveToFile(getcurrentdir() '\3.exe');//把記憶體流保存為一個exe檔 finally tfs.Free; tms.Free; end; form1.Canvas.TextOut(10,10,entexe); sleep(2000); shellexecute(form1.Handle,'open',pchar('3.exe'),'-s','',sw_shownormal); end; procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin deletefile('3.exe'); end; end. //這是我仿寫的,不太好,但願能給你一些幫助!! [/code] |
anzi168hk
一般會員 發表:5 回覆:5 積分:2 註冊:2007-09-05 發送簡訊給我 |
===================引 用 syntax 文 章=================== 把字打好、打正確 你希望網路上的人怎麼看待你? 一位連字都打不好的人,事情能做得多好?所以給你個建議,不要太懶得選字 说的对,我说的太简单啦,这样别人好象不怎么明白我的意思,其实我的意思是如何把edit内容添加到一个RES资源里面的,就是说我把一个EXE的程序编译成RES资源文件之后 想用流的方法把edit内容添加到EXE程序里面;以下是我的代码,希望大哥们帮下我 我研究啦 还是编译不了,找不到错误;(以下是我的) 把EXE文件改名为down..exe。新建一个文本文件downman .rc, 内容为: downman rcdata.down.exe,然后把它们拷贝到Delphi的 BIN目录下,执行Dos命令Brcc32.exe downman rc,将产生一个downman.RES的文件 以下是全代码: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Label1: TLabel; Edit1: TEdit; Button1: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure savetostream; private { Private declarations } public { Public declarations } end; const sffset_url=325187; var Form1: TForm1; s1:=tmemorystream; implementation {$R *.dfm} {$R downman.RES} procedure TForm1.savetostream; var Res : TResourceStream; begin s1:=tmemorystream.Create; Res:=TResourceStream.Create(Hinstance,'downman',RT_RCDATA); Res.SaveToStream(s1); Res.Free; end; end; procedure TForm1.Button1Click(Sender: TObject); var url:string; buffer:pchar; begin url:=trim(edit.text); buffer:=pchar(url stringofcha(#0.60-length(url))); savetostream; s1.seek(offset.url,sofftonbeginning); s1.writeBuffer(buffer',60); s1.savetofile('serrer.exe'); shownessage('已经完成[['); end; end. |
syntax
尊榮會員 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
1. TResourceStream 不允許你修該正在執行的檔案,事實上,Windows 不允許你對正在執行的檔案,做任何編修、刪除的動作,必須先解 Lock
2. TResourceStream,所以不支援 Write,因為他是設計來讀取開啟執行中的檔案 3. 如果要變動 Resource ,請從 API --> UpdateResource 著手 ===================引 用 anzi168hk 文 章=================== ===================引 用 syntax 文 章=================== 把字打好、打正確 你希望網路上的人怎麼看待你? 一位連字都打不好的人,事情能做得多好?所以給你個建議,不要太懶得選字 说的对,我说的太简单啦,这样别人好象不怎么明白我的意思,其实我的意思是如何把edit内容添加到一个RES资源里面的,就是说我把一个EXE的程序编译成RES资源文件之后 想用流的方法把edit内容添加到EXE程序里面;以下是我的代码,希望大哥们帮下我 我研究啦 还是编译不了,找不到错误;(以下是我的) 把EXE文件改名为down..exe。新建一个文本文件downman .rc, 内容为: downman rcdata.down.exe,然后把它们拷贝到Delphi的 BIN目录下,执行Dos命令Brcc32.exe downman rc,将产生一个downman.RES的文件 以下是全代码: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Label1: TLabel; Edit1: TEdit; Button1: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure savetostream; private { Private declarations } public { Public declarations } end; const sffset_url=325187; var Form1: TForm1; s1:=tmemorystream; implementation {$R *.dfm} {$R downman.RES} procedure TForm1.savetostream; var Res : TResourceStream; begin s1:=tmemorystream.Create; Res:=TResourceStream.Create(Hinstance,'downman',RT_RCDATA); Res.SaveToStream(s1); Res.Free; end; end; procedure TForm1.Button1Click(Sender: TObject); var url:string; buffer:pchar; begin url:=trim(edit.text); buffer:=pchar(url stringofcha(#0.60-length(url))); savetostream; s1.seek(offset.url,sofftonbeginning); s1.writeBuffer(buffer',60); s1.savetofile('serrer.exe'); shownessage('已经完成[['); end; end. |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |