有空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
这样设置后,新创建出来的窗口就显示在Panel1中了。
关闭子窗体要在 onClose 里设置 action:=caFree; --fsMdiform和fsMdiChild模式下,子窗口都是这样关闭。追问
我不是问如何创建窗体和关闭窗体,我是问怎么写触发事件的,现在我用消息解决了!没问题了!
参考技术B 没有这么复杂吧,指定一个窗体为父窗体,然后再将其它窗体设置为子窗体,这些都是通过窗体的属性设置的,无须写什么代码。子窗体总是在父窗体上面,这时父窗体只是一个容器,容纳子窗体而已。子窗体也不能移动到父窗体之外去。追问设置子窗体是不用那么复杂啊,我想做的是当子窗体关闭时关闭pageControl的一个Tabsheet,所以要能控制父窗体的组件啊
追答你看过OFFICE的图片编辑器吧,那就是一个标准的父子窗体样版,在主窗口中打开一张图片就创建了一个子窗体。父窗体除了菜单栏和工具栏之外,它是没有其它实质性功能的。
delphi平台,在一个主窗体上打开两个子窗体,也就是:打开一个子窗体之后,再打开第二个窗体第一个窗体不关闭
使用xx.Show;
来打开.
子窗口关闭不是关闭其实是隐藏。只有主窗体关闭才是真正的关闭程序
你直接Show就好了追问
我现在的情况是打开了一个子窗体,但是想打开第二个子窗体的时候,刚才打开的那个子窗体就不见了。我希望这两个子窗体互不影响,都显示出来
追答设置窗口置顶。不是不见了而是被覆盖了。在窗口Style里面选择
参考技术A 在主窗口下打开一百个窗子都可以,只不过是你打开第二窗子的时候,第一个窗子,跑到了主窗体的下面.如果你认为这样不好的话,你可以把主窗体设置为父窗体,其它窗体都设置成子窗体.这样的话,所有打开的子窗体,都会在主窗体里面.(移不到主窗体的外面去),这你可能又不太满意了.其实,一个软件同时开多个窗体,对于用户来说,意义并不大,因为某个时刻,可以进行操作的窗体永远只有一个,一般来来说需要同时关注两个窗体的事情,就是一边输入数据,一边关注数据的保存情况,或者观察主从表数据数据变化,对于这类情况,一般主张对窗口进行分区处理,比如一个分区块是输入数据区,另一个是数据浏览区,或者上面是主表数据,下面是从表数据.没有必要用两个窗体 参考技术B 窗体属性里有相关设置。 不要选择选择项有single**,Dialog**等,我用的都是单界面所以,你试下.以上是关于有空delphi子窗体关闭触发父窗体做出一系列改变的操作,主要就是子窗体关闭时能改变父窗体组件状态的主要内容,如果未能解决你的问题,请参考以下文章