有空delphi子窗体关闭触发父窗体做出一系列改变的操作,主要就是子窗体关闭时能改变父窗体组件状态
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有空delphi子窗体关闭触发父窗体做出一系列改变的操作,主要就是子窗体关闭时能改变父窗体组件状态相关的知识,希望对你有一定的参考价值。
以下内容有谁看懂的,是在人家博客上看到的,那个在子窗体内新加一个类应该写在哪里?每句代码应该写的具体位置麻烦能看懂的人帮我说说,有自己想法的也可以说说!麻烦了!
delphi 里的mdi 子窗口始终在最底层,父窗口的控件始终在子窗口之上,子窗口上的控件被遮挡,看起来很别扭。
有两种解决办法。一种是把父窗口的formstyle :=fsMdiform; 子窗口 formstyle :=fsMdiChild;在父窗口里放置一个panel1 和父窗口尺寸一样大。在把父窗口的控件都放在这个panel1上。在设置子窗口的的父类是panel1.
这里有个关键代码,a:=TForm2.Create(self); windows.SetParent(a.Handle,Panel1.Handle );
经过这种设置后,产生的子窗体就在最上了。关闭子窗体要在 onClose 里设置 action:=caFree; 如果要通知父窗体子窗口已关闭,可以在子窗体里设计一个自定义类。type TshowEvent = procedure(show: bool) of object;
在窗口类定义里 private FshowEvent: TshowEvent;
public property onShowEvent: TshowEvent read FshowEvent write FshowEvent;
在子窗体里 onClose 里 if Assigned(onShowEvent) then onShowEvent(true);
在父窗体窗口类里 procedure showMessage(show:bool);
Form1.showpage(show: bool);
begin
if show then //接到子窗口的关闭通知
end
那主要是主窗体怎么在消息中做出相应的反应呢?麻烦跟我说一下,该把代码写在哪里呢?
参考技术B 子窗体关闭时调用主窗体 Main_frm.追问怎么调用,可以说清楚点吗?主窗体本来就是没有隐藏的,MDI主窗体来的?如果懂的话,请麻烦你说清楚一下,不胜感激!
追答比喻
你在关闭子窗体时启用Timer1,你可以在Timer1里写事件。方法好多的。
主要你子窗体要引用主窗体就可以了。
主窗体.Timer1.Enabled:=true;
close;
在父窗体中用showModalDialog方式打开一个页面,并在页面中删除一条记录,成功后刷新本页面,再关闭本页面
再关闭本页面时刷新父窗体,怎么做?
showModalDialog 是打一个模式窗口,模式窗口的意思是不关闭后打开的窗口就操作不了前一个窗口,比如打开IE,再点Internet选项一样,Internet就是一个模式窗口。window.showModalDialog(URL,dialogArgments.features) 打开一个新窗口(IE4、IE5、IE6支持,在IE7中没有window.showModalDialog这个方法,所以取不到该值 。你可以实现有其它方法来实现这个)。dialogArgments为设定好传递给新视窗网页的参数,可以为任意数据类型。 调用格式为featureName1:featureValue1:(分号)featureName2:featureValue2: certer , dialogHeight, dialogLeft,dialogTop,dialogWidth,help(是否显示help按钮,下同),status,resizeable 值=1为yes,0为no.我认为最重要的是dialogArgments,可以传递值到新的窗口。
第二重要就是它的返回值 window.returnValue.可以在showModalDialog开启的窗口关闭后前,回传一个任意类型的值。
-----------------------------------------------删除---------------------------------------------------------------
不明白你指的删除什么意思,不是直接删除表单数据吧,还是删除数据库中数据。
-----------------------------------------------刷新---------------------------------------------------------------
在showModalDialog里是不能按F5刷新的,又不能弹出菜单。这个只能依靠javascript了,以下是相关代码:
<body onkeydown="if (event.keyCode==116)reload.click()">
<a id="reload" href="filename.htm" style="display:none">reload...</a>
将filename.htm替换成网页的名字然后将它放到你打开的网页里,按F5就可以刷新了,注意,这个要配合<base target="_self">使用,不然你按下F5会弹出新窗口的。
-----------------------------------------------关闭---------------------------------------------------------------
用javascript关掉showModalDialog(或showModelessDialog)打开的窗口。
<input type="button" value="关闭" onclick="window.close()">
也要配合<base target="_self">,不然会打开一个新的IE窗口,然后再关掉的。 参考技术A 如果只是要完成这个功能,干嘛不直接跳转到另外一个页面处理,处理完后再跳转回去。
以上是关于有空delphi子窗体关闭触发父窗体做出一系列改变的操作,主要就是子窗体关闭时能改变父窗体组件状态的主要内容,如果未能解决你的问题,请参考以下文章