要求:程序一运行时俩窗体同时显示(子窗体显示在前面),这点已做到;现在子窗体有一button1要求显示主窗体(已存在则直接显示)我现在的问题是:点button1时显示主窗体子窗体没法关闭(其实是主窗体FormCreate中又创建了一次);看看吧或许描述的不清,代码明了:
mainFrom:const WM_MYMSG=WM_APP+1; procedure WMMYMSG( var msg:Tmessage); message WM_MYMSG;
end;var
MainForm: TMainForm;implementation
uses unit2,Unit3;{$R *.dfm}
procedure TMainForm.WMMYMSG( var msg:Tmessage);
var
f:TForm1;
begin
f:=TForm1.create(nil);
f.ShowModal;
end;procedure TMainForm.FormCreate(Sender: TObject);
var
f:TForm1;
begin
PostMessage(Handle,WM_MYMSG,0,0);
end;
子窗体:procedure TForm1.Button1Click(Sender: TObject);
var
f:TMainForm;
begin
try
if not Assigned(f) then
begin
f:=TMainForm.Create(self);
f.Show;
end;
finally
if Form1<>nil then
freeandnil(Form1);
end;
end;end.
mainFrom:const WM_MYMSG=WM_APP+1; procedure WMMYMSG( var msg:Tmessage); message WM_MYMSG;
end;var
MainForm: TMainForm;implementation
uses unit2,Unit3;{$R *.dfm}
procedure TMainForm.WMMYMSG( var msg:Tmessage);
var
f:TForm1;
begin
f:=TForm1.create(nil);
f.ShowModal;
end;procedure TMainForm.FormCreate(Sender: TObject);
var
f:TForm1;
begin
PostMessage(Handle,WM_MYMSG,0,0);
end;
子窗体:procedure TForm1.Button1Click(Sender: TObject);
var
f:TMainForm;
begin
try
if not Assigned(f) then
begin
f:=TMainForm.Create(self);
f.Show;
end;
finally
if Form1<>nil then
freeandnil(Form1);
end;
end;end.
解决方案 »
- 关于dbgrid的问题
- 如何知道用户在结束我的程序?
- 一个ListView分割成两个
- 程序調試和發布的問題,請指教
- 将excel和mdb数据库互相导入导出
- 急需支持Delphi 7.0的数据导出控件(Excel 、Html 、PDF、TXT)
- 在quickrep中如何设置打印份数?
- dbgrid符合条件行变色
- 做了个试验,我用IStorage存储了个文件,再调用dll,传给文件的地址,让dll操作后,主程序再读取文件,为什么ole报错Invalid tag error?
- 用CreateDesktop创建一个非交互状态的桌面(即不在屏幕上显示的桌面),怎样才能向其发送键盘和鼠标的输入消息和获取其桌面图像?
- 这句SQL语句中的条件怎样理解?
- Delphi的sendfile时候后界面锁定
何况你的Button1Click代码造成循环了,创建MainForm时会重新PostMessage,又创建Form1只改变他们的hide,show就行了procedure TForm1.Button1Click(Sender: TObject);
begin
MainForm.show;
freeandnil(Form1); //或者可以考虑用Form1.hide
end;
如果 from1是showmodal窗体的子窗体
那么 from显示时 只能from1.show;不能用showmodal 要不然 主窗体没法在前
var f:TForm1;
begin
f:=TForm1.create(nil);
f.ShowModal;
end;procedure TForm1.Button1Click(Sender: TObject);
var f:TMainForm;//这是局部变量
begin
try
if not Assigned(f) then //所以你这句 没有意义!
begin
f:=TMainForm.Create(self);
f.Show;
end;
finally
if Form1<>nil then //这是什么东西!?
freeandnil(Form1);
end;
end;
end.
你写得太深奥! 水平有限,看不懂
frmmain.show;//显示主窗体