2

我的申请中有两个单独的表格。我创建了一个额外的空表单,并在其上放置了一个带有两个菜单项的 TMainMenu 组件。这个新表单将作为加载其他所有内容的主要表单。现在我希望它像这样工作:当您单击两个菜单项中的任何一个时,它应该加载相应表单的内容,该菜单项与主表单相关联。我怎样才能做到这一点?或者解决这类问题的典型方法是什么?请提供一个简单的说明性示例。

在此处输入图像描述 在此处输入图像描述

4

3 回答 3

0

TPanel在你的上创建一个MainForm并设置它的Align := alClient, BevelOuter := bvNone。同时给出MainForm属性Form1: TForm1Form2: TForm2。然后显示Form1Form2以这种方式:

显示Form1

if not Assigned(MainForm.Form1) then
  MainForm.Form1 := TForm1.Create(MainForm);
MainForm.Form1.Parent := MainForm.Panel1;
MainForm.Form1.Align := alClient;
MainForm.Form1.BorderStyle := bsNone;
MainForm.Form1.Visible := True;
if Assigned(MainForm.Form2) then
  MainForm.Form2.Visible := False;

当然你不需要写MainForm;这只是为了使示例清晰。

于 2013-05-18T09:42:24.300 回答
0

如果您已经创建了一堆表单并且想要添加显示“停靠”的功能,您可以将继承更改为新模板而不是 TFrom。
通过添加和重载构造函数,您将能够像往常一样使用它们或“停靠”它们。
要更改继承,您只需替换

type
  TYourForm = class(TForm)

type
  TYourForm = class(TTemplate)

并将objectDMF 中的替换为inherited

{
  public
    Constructor Create(AOwner:TComponent;AParent:TWinControl=nil);Overload;
.....
}
constructor TTemplate.Create(AOwner: TComponent; AParent: TWinControl);
begin
  inherited Create(AOwner);
  if Assigned(AParent) then
    begin
      BorderStyle := bsNone;
      Parent := AParent;
      Align := alClient;
    end;
end;
于 2013-05-18T10:55:14.210 回答
0

如果您想在主表单中嵌入其他表单,请在主表单设置 alclient 属性中放置一个 tpanel。当点击 set fromxxx.parent 是您的面板名称。

这是一个示例代码

  begin
    if Dm.TblUser.Active=False then 
      Dm.TblUser.Active := True;
    if FrmPUserG=nil then 
      FrmPUserG := TFrmPUserG.Create(Self);
    FrmpUserG.Parent := PnLContainer;
    FrmpUserG.Align := alClient;
    FrmpUserG.BorderStyle := bsNone;
    FrmpUserG.Visible := True;
    FrmpUserG.BringToFront;
  end;
于 2013-05-18T09:13:55.913 回答