【问题标题】:TPanel in extra unit (with designer)额外单元中的 TPanel(带设计师)
【发布时间】:2012-07-19 13:38:29
【问题描述】:

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

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

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

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

Unit2.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=)。

我必须做什么,才能将我设计的面板放入主窗体中?

感谢您的帮助。

【问题讨论】:

  • 这就是他们引入框架的原因......
  • 同意@whosrdaddy,将每个面板放在每个单元内的 TFrame 中,然后通过 1) 创建框架,2) 将每个框架的父级设置为主面板你的形式。
  • 我写过这个问题出在 Firemonkey 中。 Firemonkey 中没有框架。
  • @whosrdaddy:你确定看到我删除的答案了吗?
  • @AndreasRejbrand:不,没看到 :)

标签: delphi delphi-xe2 firemonkey tpanel


【解决方案1】:

我这样做的方法是使用我所谓的嵌入表单,它是 FireMonkey 的框架等价物。

为您的每个面板创建一个表单,并向其中添加一个面板:

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

将控件放置在面板内。

在您的主窗体中,实例化每个窗体,并获取它的面板:

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

(根据需要设置 Position 和 Align 属性)。

请注意,如果面板很小,您可以将多个面板添加到一个表单中并单独设置每个父级,对于更大的面板或更好的模块化添加一个到每个表单。

【讨论】:

  • 这也是我经过几个小时的搜索和尝试后发现的。我只推荐使用 TLayout 而不是 Panels。我认为它们没有风格,更适合这种动作。
  • TPanel 与 TLayout 完全取决于您希望它如何显示。当然,您可以嵌入任何控件。例如。一个 TTreeView,如果那是你设计的一个方便的子单元。
【解决方案2】:

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

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

  // paste GExperts-generated code here
end;

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    • 2017-02-02
    • 1970-01-01
    • 2010-09-11
    • 1970-01-01
    相关资源
    最近更新 更多