请问打开一个模式窗口如何让它在关闭时能返回一个值到主窗口?

JoeSong 2003-12-18 09:31:44
请问打开一个模式窗口如何让它在关闭时能返回一个值到主窗口?
不用公共变量啊!谢了!
...全文
204 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
steventone 2003-12-18
  • 打赏
  • 举报
回复
//----本人花了几分钟做了一个简例,希望对你有所帮助
program moldfrm_p;

uses
Forms,
moldfrm in 'moldfrm.pas' {Form1};

{$R *.res}

begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
//--------------------------
unit moldfrm;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure CreClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}



procedure TForm1.CreClose(Sender: TObject; var Action: TCloseAction);
begin
ShowMessage('CreClose!');
Button1.Caption:='CreateFrm';
Button1.Enabled:=true;
Action:=caFree;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
CreFrm:TForm;
begin
CreFrm:=TForm.Create(self);
CreFrm.Width:=200;
CreFrm.Height:=150;
CreFrm.FormStyle:=fsMDIChild;
CreFrm.OnClose:=CreClose;
CreFrm.Show;
Button1.Caption:='have a frm';
Button1.Enabled:=false;
end;

end.


nxfbccu 2003-12-18
  • 打赏
  • 举报
回复
可以用函数返回结果
或者定义一个constructor(var vResult:string);用vResult来返回结果
lgqTiger 2003-12-18
  • 打赏
  • 举报
回复
或者这样,可以帮你理解它的原理:
====================================
var Code:Integer;
begin
Code:= form2.ShowModal;
ShowMessage(IntToStr(Code));
end;
=====================================
你观察它的提示值和你所敲的按钮的关系就明白了
前提是:将Form2.visbil:=False;
VeryOldMan 2003-12-18
  • 打赏
  • 举报
回复
variant := From.ShowModal;
google1106 2003-12-18
  • 打赏
  • 举报
回复
模式窗口又modalResult,本身可以返回一些结果

模式窗体如果本身又property的化,在模式窗体close之后,只要没有被free,那么这个窗体的property都是可以被取出来的,起始,只要你在引用的窗体内包含了这个模式窗体的话,这个模式窗体内的所有变量应该都可以用的,但是用property好像更安全一些,不知道我说的对不对
JoeSong 2003-12-18
  • 打赏
  • 举报
回复
myth_2002(myth)的回答最爽了,因为一看就知道是我想要的结果! 谢谢各位啊!结贴了,虽然只有20分,但最重要的是准时结贴嘛!
qiujsh 2003-12-18
  • 打赏
  • 举报
回复
看看InputQuery那个函数,就可以了
zjl317 2003-12-18
  • 打赏
  • 举报
回复
这可其实不难。
如果你用showmodal的话,其实很简单。面向对象。
如果你不用showmodal,用点小技巧。窗口的句柄。
我不贴代码了,希望可以点透你。要充分发挥delphi的OOP功能。不要uses来uses去的。。
myth_2002 2003-12-18
  • 打赏
  • 举报
回复
给你一个思路:
模式对话框:
unit ModuleForm
type
TModuleForm=class(TForm)
Button1:TButton;
private
returnvalue:string//你想要返回的值;
public
function execute(p1:string):string;//返回值的类型;
end;
var
ModuleForm:TModuleForm;
implementation
Function TModuleForm.execute(p1:string):string;
begin

.......
//利用P1参数做一些showModule之前的初始化工作;
ModuleForm.ShowModal;
return returnvalue;
end;
在主窗口程序中:
procedure TMainForm.showModuleForm
var
rtnValue:string;

begin
Application.CreateForm(TModuleForm,ModuleForm);

rtnValue:=ModuleForm.execute('初始化用的参数');
end;
JoeSong 2003-12-18
  • 打赏
  • 举报
回复
我知道可以返回一个mr_OK之类的Integer值,但我的目的是上面有一个TListView控件或TEdit控件,我想返回它们的值,这才是我想要的。

google1106(钻石渣):
据你所讲的方法,是不是我可以用property直接定义一个属性然后最后取这个返回值呢?自定义控件可以这样做,但这是一个可视化的FORM,也能这样实现吗?还没试过,请指点。

VeryOldMan(老者):
你所讲的就是返回的那个Integer的值,但多数情况如果正常关闭了窗体应当返回0值吧!或者就是mr_OK吧,这个记不清楚了。

lgqTiger(我爱Delphi):
可能会有用吧,我要试了才知道!不过同样不能达到我的目的。

nxfbccu(虚无漂渺):
有没有一个多一点的说明呢?

steventone(心兰):
你给我写出可能不是太有用吧,不过待我验证后再说。

-----------------------------------------------------------
非常谢谢各位关注我的问题啊!

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧