道
道明德
Unregistered / Unconfirmed
GUEST, unregistred user!
问题:
程序的主窗体TFormA是一个MIDForm窗体,其子窗体TFormB是MDIChild子窗体。
在显示出TFormB后,要求显示一个窗体TFormC,使得它只能在TFormB中显示,并且正常运行。
目前的方案:
FormA.formStyle := fsMDIForm;
FormB.formStyle := fsMDIChild;
FormC.formStyle := fsNormal;
FormC.parent := FormB;
FormC.OnClick := TFormC.BringFormCToFront;
procedure TFormC.BringFormCToFront(sender:TObject);
begin //目的:解决设置Form.parent后,单击时无法将该窗体显示在最前面的问题
self.bringToFront;
end;
该方案的缺陷:
1. 窗体标题栏始终灰显
2. 只有使用自定义的OnClick事件才能激活第二(N)层的子窗体。
3. 第二层子窗体上的TEdit/TCombBox等编辑控件无法聚焦(当然也可以写Onclick事件进行SetFocus,只是比较别扭)
本没时间去细究窗口的底层实现机制,来这儿请教高手,运气好的话可以偷个懒。
如果您没有完整解决方案也可以一起讨论,先谢了。 讨论、帮顶有分。
程序的主窗体TFormA是一个MIDForm窗体,其子窗体TFormB是MDIChild子窗体。
在显示出TFormB后,要求显示一个窗体TFormC,使得它只能在TFormB中显示,并且正常运行。
目前的方案:
FormA.formStyle := fsMDIForm;
FormB.formStyle := fsMDIChild;
FormC.formStyle := fsNormal;
FormC.parent := FormB;
FormC.OnClick := TFormC.BringFormCToFront;
procedure TFormC.BringFormCToFront(sender:TObject);
begin //目的:解决设置Form.parent后,单击时无法将该窗体显示在最前面的问题
self.bringToFront;
end;
该方案的缺陷:
1. 窗体标题栏始终灰显
2. 只有使用自定义的OnClick事件才能激活第二(N)层的子窗体。
3. 第二层子窗体上的TEdit/TCombBox等编辑控件无法聚焦(当然也可以写Onclick事件进行SetFocus,只是比较别扭)
本没时间去细究窗口的底层实现机制,来这儿请教高手,运气好的话可以偷个懒。
如果您没有完整解决方案也可以一起讨论,先谢了。 讨论、帮顶有分。