全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2536
推到 Plurk!
推到 Facebook!

如何把edit的內容保存到程序裏麵

尚未結案
anzi168hk
一般會員


發表:5
回覆:5
積分:2
註冊:2007-09-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-09-25 03:38:52 IP:59.34.xxx.xxx 訂閱
各位前輩妳們好,如何把edit的內容保存到程序的內存流裏麵
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-09-25 06:02:42 IP:61.64.xxx.xxx 訂閱
把字打好、打正確
你希望網路上的人怎麼看待你?
一位連字都打不好的人,事情能做得多好?所以給你個建議,不要太懶得選字

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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-09-25 08:26:36 IP:218.85.xxx.xxx 訂閱

===================引 用 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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-09-25 13:47:45 IP:125.90.xxx.xxx 訂閱
谢谢各位大哥们 我写的是繁体字啊
qqqufo
一般會員


發表:1
回覆:17
積分:8
註冊:2007-06-01

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-09-25 14:41:38 IP:218.85.xxx.xxx 訂閱

===================引 用 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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-09-26 03:26:59 IP:125.90.xxx.xxx 訂閱

===================引 用 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.
編輯記錄
anzi168hk 重新編輯於 2007-09-26 03:28:43, 註解 無‧
anzi168hk 重新編輯於 2007-09-26 03:30:07, 註解 無‧
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-09-26 10:18:04 IP:61.64.xxx.xxx 訂閱
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.
系統時間:2024-04-29 10:46:42
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!