有空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

参考技术A 这里有个关键代码,a:=TForm2.Create(self); --创建新窗口, windows.SetParent(a.Handle,Panel1.Handle ); --设置新窗口的父对象是 Panel1,

这样设置后,新创建出来的窗口就显示在Panel1中了。

关闭子窗体要在 onClose 里设置 action:=caFree; --fsMdiform和fsMdiChild模式下,子窗口都是这样关闭。追问

我不是问如何创建窗体和关闭窗体,我是问怎么写触发事件的,现在我用消息解决了!没问题了!

参考技术B 没有这么复杂吧,指定一个窗体为父窗体,然后再将其它窗体设置为子窗体,这些都是通过窗体的属性设置的,无须写什么代码。子窗体总是在父窗体上面,这时父窗体只是一个容器,容纳子窗体而已。子窗体也不能移动到父窗体之外去。追问

设置子窗体是不用那么复杂啊,我想做的是当子窗体关闭时关闭pageControl的一个Tabsheet,所以要能控制父窗体的组件啊

追答

你看过OFFICE的图片编辑器吧,那就是一个标准的父子窗体样版,在主窗口中打开一张图片就创建了一个子窗体。父窗体除了菜单栏和工具栏之外,它是没有其它实质性功能的。

delphi平台,在一个主窗体上打开两个子窗体,也就是:打开一个子窗体之后,再打开第二个窗体第一个窗体不关闭

使用
xx.Show;
来打开.
子窗口关闭不是关闭其实是隐藏。只有主窗体关闭才是真正的关闭程序
你直接Show就好了追问

我现在的情况是打开了一个子窗体,但是想打开第二个子窗体的时候,刚才打开的那个子窗体就不见了。我希望这两个子窗体互不影响,都显示出来

追答

设置窗口置顶。不是不见了而是被覆盖了。在窗口Style里面选择

参考技术A 在主窗口下打开一百个窗子都可以,只不过是你打开第二窗子的时候,第一个窗子,跑到了主窗体的下面.如果你认为这样不好的话,你可以把主窗体设置为父窗体,其它窗体都设置成子窗体.这样的话,所有打开的子窗体,都会在主窗体里面.(移不到主窗体的外面去),这你可能又不太满意了.其实,一个软件同时开多个窗体,对于用户来说,意义并不大,因为某个时刻,可以进行操作的窗体永远只有一个,一般来来说需要同时关注两个窗体的事情,就是一边输入数据,一边关注数据的保存情况,或者观察主从表数据数据变化,对于这类情况,一般主张对窗口进行分区处理,比如一个分区块是输入数据区,另一个是数据浏览区,或者上面是主表数据,下面是从表数据.没有必要用两个窗体 参考技术B 窗体属性里有相关设置。 不要选择选择项有single**,Dialog**等,我用的都是单界面所以,你试下.

以上是关于有空delphi子窗体关闭触发父窗体做出一系列改变的操作,主要就是子窗体关闭时能改变父窗体组件状态的主要内容,如果未能解决你的问题,请参考以下文章

MFC中怎么让子窗体大小随着父窗口的大小变化而改变?

delphi 子窗体如何调用父窗体的方法

js 关闭子窗体时如何刷新父窗体

delphi平台,在一个主窗体上打开两个子窗体,也就是:打开一个子窗体之后,再打开第二个窗体第一个窗体不关闭

php 窗体关闭以后怎样自动刷新父页面

在父窗体中用showModalDialog方式打开一个页面,并在页面中删除一条记录,成功后刷新本页面,再关闭本页面