Delphi中的TMainMenu

Delphi中的TMainMenu,delphi,delphi-7,Delphi,Delphi 7,我的申请表中有两张单独的表格。我创建了一个额外的空表单,并在其上放置了一个带有两个菜单项的TMainMenu组件。这个新表单将作为主要表单,其他所有内容都将从中加载。现在我希望它是这样工作的:当您单击两个菜单项中的任何一个时,它应该将相应表单的内容加载到与主表单相关联的菜单项中。我怎样才能做到这一点?或者,解决这类问题的典型方法是什么?请提供一个简单的示例 如果要在主窗体中嵌入其他窗体,请在主窗体集合alclient属性中插入tpanel。当单击set fromxxx时,parent是您的面板名

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


如果要在主窗体中嵌入其他窗体,请在主窗体集合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;

main窗体上创建一个
TPanel
,并设置其
Align:=alClient
bevelooter:=bvNone
。同时给出
MainForm
属性
Form1:TForm1
Form2:TForm2
。然后以这种方式显示
Form1
Form2

显示
表格1

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
;这只是为了让示例更清楚。

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

type
  TYourForm = class(TForm)

并将DMF中的
对象
替换为继承的

{
  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;

使用TFrame,它们是专门为此而设计的。我认为这可以通过一个非常基础的教程来解决。退房,我查过了。谢谢但是如何将现有表单转换为框架呢?创建一个新的TFrame,然后将现有的TForm控件和相关代码复制/粘贴到它上面。我猜是downvote,这里没有提到Dm变量。此外,该代码段似乎是从某些现有代码中复制和粘贴的。它是从我运行的另一个程序中复制和粘贴的。虽然继承可能很整洁,但我不喜欢这种解决方案,因为您让表单意识到这种嵌入,而完全不需要这样做。
{
  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;