各位好,我想请教一问题。
我希望实现类似mdi的多窗口操作的系统,但是不愿意使用mdi构架。目前的想法是在主窗体(不是mdiform)中放一个pagecontrol组件,把这个组件的sheet来作为窗体的容器,现在窗体可以装进来,但是焦点却出现问题,无法正常对窗体进行操作。
请各位指教,谢谢。我现在的办法比较笨,也可能不安全,事情又比较紧,请各位赶快江湖救急。
将体现我目前处理方法的原理的代码粘贴如下:
主窗体form1中放一个pagecontrol,一个按钮;工程中再引入一个窗体form2,在form2中放一个pagecontrol,设计时加入一个sheet,把sheet作为窗体来设计。
form2的代码为:
procedure shownormalform;
var
Form2: TForm2;
begin
form2:= tform2.Create(nil);
with form2 do
begin
try
TabSheet1.PageControl:= form1.PageControl1;
except
end;
end;
end;
form1中的按钮代码为调用form2种的方法shownormalform
这样相当于把form2的pagecontrol的sheet搬移到form1的pagecontrol中显示。
这样做是为了方便开发设计,否则所有的模块都只好堆到form1中了。
但是这样却不好处理form2的释放。本来还想过用frame的,但是设计好的frame不知道如何通过代码加到sheet中去。我只会在设计期加入frame。我现在释放form2的办法是记录其handle,然后在需要释放的时候发送消息
sendmessage(handle, wm_close, 0, 0);
来关闭,在其close中写action:= cafree。这样就连同那个移到form1的sheet也释放了。
因此只有在释放sheet时才能释放其最初的载体窗体。
我希望实现类似mdi的多窗口操作的系统,但是不愿意使用mdi构架。目前的想法是在主窗体(不是mdiform)中放一个pagecontrol组件,把这个组件的sheet来作为窗体的容器,现在窗体可以装进来,但是焦点却出现问题,无法正常对窗体进行操作。
请各位指教,谢谢。我现在的办法比较笨,也可能不安全,事情又比较紧,请各位赶快江湖救急。
将体现我目前处理方法的原理的代码粘贴如下:
主窗体form1中放一个pagecontrol,一个按钮;工程中再引入一个窗体form2,在form2中放一个pagecontrol,设计时加入一个sheet,把sheet作为窗体来设计。
form2的代码为:
procedure shownormalform;
var
Form2: TForm2;
begin
form2:= tform2.Create(nil);
with form2 do
begin
try
TabSheet1.PageControl:= form1.PageControl1;
except
end;
end;
end;
form1中的按钮代码为调用form2种的方法shownormalform
这样相当于把form2的pagecontrol的sheet搬移到form1的pagecontrol中显示。
这样做是为了方便开发设计,否则所有的模块都只好堆到form1中了。
但是这样却不好处理form2的释放。本来还想过用frame的,但是设计好的frame不知道如何通过代码加到sheet中去。我只会在设计期加入frame。我现在释放form2的办法是记录其handle,然后在需要释放的时候发送消息
sendmessage(handle, wm_close, 0, 0);
来关闭,在其close中写action:= cafree。这样就连同那个移到form1的sheet也释放了。
因此只有在释放sheet时才能释放其最初的载体窗体。
if not Assgined(Form2) then
Form2 := TForm2.Create(Application);
with Form2 do
begin
ParentWindow := Panel1.Handle;
Show;
end;