我想实现这样的界面:主窗体
最上方是菜单,下面是工具栏,最左边是OutLook工具栏
右下方的大区域,显示子窗体(子窗体根据需要在此区域切换)!请注意,系统不是MDI框架,而是SDI框架!有没专门来完成此功能的控件,
请不要告诉我用 Form2.Parent:=Panel1;
这样的Form2可操作性极差!
最上方是菜单,下面是工具栏,最左边是OutLook工具栏
右下方的大区域,显示子窗体(子窗体根据需要在此区域切换)!请注意,系统不是MDI框架,而是SDI框架!有没专门来完成此功能的控件,
请不要告诉我用 Form2.Parent:=Panel1;
这样的Form2可操作性极差!
frame就是一个窗体(满足你的要求)
然后在主窗体上放一个frames(standard工具栏第一个)
创建新窗体,融合到主窗体中。
创建新窗体,融合到主窗体中。
此种方法能不能再说清楚点?如果用FRAME代替窗体的话,很多事件没了,释放资源不方便,我需要在此容器中放几百种窗体
有哪位大侠有更好的方法,用第三方控件也行?
在你的主窗体中写以下代码:
//写在需要创建窗体事件中
If Not(Assigned(Frm2)) then
Frm2:= TFrm2.Create(Application);
LoadChildForm(Panel1,Frm2);//
function LoadChildForm(aParent: TWincontrol; aChild: TForm): Boolean;
begin
If aChild.Parent=aParent then
begin
Result := True;
Exit;
End;
With aChild do
begin
Parent := aParent;
align := alClient;
Position := poDefault;
BorderStyle := bsNone;
BorderIcons := [];
end;
aChild.Show;
Result := True;
end;
Frm2:= TFrm2.Create(Application);
虽然能控制一个窗体只能创建一次,但不能控制及时释放资源,
比如aParent已有其它窗体,当我在此显示其它的窗体之前,就要将此处的已显示的窗体释放掉,
如果不这样随着操作的增多,内存中会出现几百个窗体(因为工程中有300多个窗体);
此时会浪费很多的资源用Show来显示窗体,资源释放不是很方便,如果用在Close事件中Action:=CaFree;
如果之前发生异常,会出现资源漏洞,用ShowModal显示,此时的窗体,很难在操作;我发现用Frame界面还不错,但是它的事件太少了!