各位好,我想请教一问题。
我希望实现类似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时才能释放其最初的载体窗体。

解决方案 »

  1.   

    建议你直接使用一个Panel作为容器,然后创建窗体,设置窗体的ParentWindow=Panel.Handle如下:
    if not Assgined(Form2) then
      Form2 := TForm2.Create(Application);
    with Form2 do
    begin
      ParentWindow := Panel1.Handle;
      Show;
    end;
      

  2.   

    直接把窗体的parent修改放到panel上会出现无法接收焦点的问题。