1

我想创建一个可以从一个小菜单访问多个面板的单个窗口应用程序。我想从一侧滑入面板。

我做了一个小型演示应用程序,一切正常。唯一的问题是,我的演示应用程序在一种形式中有大约 7 个面板。很难对这些面板进行概览并对其进行更改,因为它们都在彼此之上。

所以我想为每个面板创建一个额外的单元,我可以在其中设计和更改我想要的面板,然后使用代码将它们添加到主窗体中。

我查看了一个表单 fmx 文件并为面板创建了一个文件,我还为面板创建了一个 .pas。

单元2.pas:

unit Unit2;

interface

uses ...

type
  TPanel1 = class(TPanel)
  Label1: TLabel;
end;
var
  Panel1: TPanel1;

implementation
{$R *.fmx}

end.

Unit2.fmx:

object Panel1: TPanel1
  Left = 0
  Top = 0
  Caption = 'Panel1'
  ClientHeight = 551
  ClientWidth = 800
  Visible = False
  StyleLookup = 'backgroundstyle'
  object Label1: TLabel
    Position.Point = '(8,8)'
    Width = 120.000000000000000000
    Height = 15.000000000000000000
    TabOrder = 9
    Text = 'Panel1'
  end
end

我现在可以使用设计器来设计我的面板。但是当我想通过执行以下操作以主要形式使用它时:

Panel1 := TPanel1.Create(Self);
Panel1.Parent := Self;

我只得到一个标准的 TPanel,而不是我设计的那个。

当我保持一切不变并且只是将基类从 TPanel 更改为 TForm 时,它会像预期的那样工作(.Show 而不是 .Parent= 当然要测试)。

我必须做什么才能让我设计的面板进入主窗体?

谢谢你的帮助。

4

2 回答 2

3

The way I would do this is to use what I call embedded forms, which is the FireMonkey equivalent of frames.

For each of your panels, create a form, and add a panel to it:

type TPanelForm1 = class(TForm)
  Panel1: TPanel;
  ...

Place you controls inside the panel.

In your main form, instantiate each form, and fetch it's panel:

procedure TForm1.FormCreate(Sender: TObject);
begin
  PF1 := TPanelForm1.Create(Self);
  PF1.Panel1.Parent := Self;
  PF1.Position := ...
  PF1.Align := ...
end;

(Set Position and Align properties as required).

Note that if the panels are small you can add a number of them to a single form and set each Parent individually, for larger panels or for better modularity add one to each form.

于 2012-07-20T16:24:22.240 回答
1

TPanel不知道如何从表单资源加载子组件。这就是表格和框架的特别之处。如果您无权访问框架,则可以改为在代码中创建所有子组件。您可以使用 GExperts 帮助您入门。创建一个新表单并按照您希望面板的外观对其进行设计。选择它上面的所有组件,并使用 GExperts“组件编码”工具。这将在剪贴板上放置一些代码。打开您的面板单元,然后在构造函数中粘贴生成的代码。

constructor TPanel1.Create(AOwner: TComponent);
begin
  inherited;

  // paste GExperts-generated code here
end;

代码将引用尚不存在的字段TPanel1,因此请在类声明中声明缺少的字段。现在您可以丢弃您正在设计的表单,或者您可以保存它以供将来修改设计。只需将更改粘贴到以前的代码上。

于 2012-07-20T13:57:52.100 回答