现有一个窗体是存在的我想做一个框子,然后把这个窗体放到这个框子当中。该怎么做?学习中,第一次提问。谢谢各位好心的哥哥姐姐

解决方案 »

  1.   

    你想要什么样的“框子”,放到一个panel上行不  with Form2 do
      begin
        Parent := Panel1;
        Align := alClient;
        BorderStyle := bsNone
        Show;
      end;
      

  2.   

    框子也可以是一个窗体。就像SQL查询分析器中的查询界面一样,一个查询分析器可以开好几个查询界面。总之就是要把我找到的一个窗体放到另一个里面就可以了
      

  3.   

    我来解释一下楼主的意思吧,说白了,他是想把外部程序变为MDI子窗体
      

  4.   

    这个效果行不行,可以让外部程序窗体“绑”在你的窗体上:)
    procedure TForm1.Button1Click(Sender: TObject);
    var
      h: THandle;
      r: TRect;
    begin
      h := FindWindowEx(Handle, 0, nil, '计算器');
      if h = 0 then
      begin
        WinExec( 'calc.exe', SW_SHOW);
        h := FindWindow(nil, '计算器');
        GetWindowRect( h, r );
        SetWindowPos( h, HWND_TOPMOST, 0, 0, 260, 250, SWP_NOMOVE);
        Windows.SetParent( h, Handle );
      end;
    end;
      

  5.   

    12楼 帅哥这样'绑'后,最大化时比较难看,能不能有像mdi窗口那样的效果? 或者有什么api能把calc.exe的窗口变成mdichild(当然form1也是mdiform)??还有 为什么 'cmd.exe' 绑不进去??
      

  6.   


    OK..完全可以谢谢!我明白GetWindowRect和SetWindowPos还有指定父窗的SetParent^_^
      

  7.   


    function DockDxfForm(ParentControl: TWinControl; Sender: TFormClass;align:TAlign): TForm;
    begin
      Result := Sender.Create(ParentControl);
      with Result do
      begin
        ManualDock(ParentControl, nil, align);
        Visible := false;
      end;
    end;function CallDXFForm(Panel:TPanel;FormName: String;formtype:TFormClass;align:TAlign):TForm ;
    var
      I: Integer;
      Fresult:Tform;
    begin
           Fresult:= DockDxfForm(Panel.Parent, TFormClass(formtype),align);
           Fresult.Left:=0;
           Fresult.Top:=0;
     //      Fresult.WindowState:=wsMaximized;
           Fresult.Align:=align;
           Fresult.Visible:=true;
           result:=Fresult;
    end;