例如
A窗口,调用并打开B窗口.在B窗口下操作之后,所得的结果要传回到A窗口继续工作.我要怎么办呢?回传的是多个数值和多个字符串我只想用到剪切板.除此还有别的什么办法?
A窗口,调用并打开B窗口.在B窗口下操作之后,所得的结果要传回到A窗口继续工作.我要怎么办呢?回传的是多个数值和多个字符串我只想用到剪切板.除此还有别的什么办法?
解决方案 »
- quickrport (delphi6.0 )报表查看器如何做啊!就是把保存后的 .qrp文件可以查看!
- MDI主窗体的背景问题???
- 横向打印问题
- formula的问题,送分了
- 菜鸟问题:Delphi 中如何像 Sql Server 2000 中的保存图片!
- 以Dat为扩展名的数据库是什么数据库?
- nmpop3控件
- 如何重写MaskEdit控件的报异常时的控制呢呢?
- 急急!!! 为何用IdFTP->Connect(true,0) 出现can'not allcate socket ?
- 如果访问,引用一个正在执行过程Procedure,但不知名称的TButton控件
- 复杂类型对象内存映像问题
- siseof的问题
或利用事件,b窗口有动作时触发a窗口中的(你自己定义的)的事件,事件中的参数就是内容。
多个数值和字符串如有必要你可以做成一个record
还有像楼主说的,可以在b窗口准备好属性后给a发消息,a收到消息后去读取属性就行了
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, unit2, StdCtrls;type
TForm1 = class(TForm)
btn1: TButton;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
procedure myevent(sender: tobject; arec: tmyrec);
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}{ TForm1 }procedure TForm1.myevent(sender: tobject; arec: tmyrec);
begin
caption := arec.a2;
end;procedure TForm1.btn1Click(Sender: TObject);
var
frm2: tform2;
begin
frm2 := tform2.Create(self);
try
frm2.myevent := self.myevent;
frm2.showmodal;
finally
frm2.free;
end;
end;end.unit Unit2;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TMyRec = record
a1: integer;
a2: string;
end;
TMyEvent = procedure(Sender: TObject; ARec: TMyRec) of object; TForm2 = class(TForm)
btn1: TButton;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
FMyEvent: TMyEvent;
public
{ Public declarations }
property MyEvent: TMyEvent read FMyEvent write FMyEvent;
end;var
Form2: TForm2;implementation{$R *.dfm}procedure TForm2.btn1Click(Sender: TObject);
var
ARec: TMyRec;
begin
aRec.a1 := 1;
aRec.a2 := 'a';
if assigned(FMyEvent) then FMyEvent(self, ARec);
end;end.
frm2 := tform2.create;
try
frm.showmodal;
当运行到这里的时候窗口已经关了,但你还可以在这里读取form2的属性,变量什么的。
finally
frm2.free; 这句之后就不能读了
end;
代码我随意敲的,大概就是这么个意思
Delphi的窗体是类,你创建了一个窗体,也就是创建了一个窗体对象,这个对象在被Free之前,你都是可以访问对象中的公布的属性和方法的。窗体对象的Show或者Close并不会释放窗体对象,除非你在Close时释放了他。你使用了ShowModal方式显示窗体,那更简单了,你不要在窗体关闭的地方释放窗体对象,把这个释放的操作放到 ShowModal 处,在其后释放,因为 ShowModal 的方式显示窗体,直到这个窗体关闭,代码才会从 ShowModal 函数处返回并继续向下执行,因此,在 ShowModal 之后 Free 之前,你可以访问这个窗体中的任何公布的数据。而你被 ShowModal 的窗体的那个计算按钮,在其点击事件中,把要传递出去的数据都写在这个窗体的私有域中,并以只读的属性公布出去,那么在这个窗体Close的时候,就能够被其他地方读取了。
因为 Show 方式显示的窗体,窗体显示出来之后,调用 Show 的代码就会返回,并不会等待窗体的关闭,因此,为了节省资源,才会在被 Show 的窗体关闭的同时释放自己。