Delphi t额外装置中的面板(带设计师)
我想创建一个单窗口应用程序,其中可以从一个小菜单访问多个面板。我想从一侧将面板滑入 我已经做了一个小的演示应用程序和一切工作。唯一的问题是,我的演示应用程序在一种形式中有大约7个面板。很难对这些面板进行概述和更改,因为它们都是相互重叠的 所以我想为每个面板创建一个额外的单元,在这里我可以像我想要的那样设计和更改面板,然后用代码将它们添加到主窗体中 我查看了一个forms fmx文件,为一个面板创建了一个文件,还为面板创建了一个.pas文件 单元2.pas:Delphi t额外装置中的面板(带设计师),delphi,delphi-xe2,firemonkey,tpanel,Delphi,Delphi Xe2,Firemonkey,Tpanel,我想创建一个单窗口应用程序,其中可以从一个小菜单访问多个面板。我想从一侧将面板滑入 我已经做了一个小的演示应用程序和一切工作。唯一的问题是,我的演示应用程序在一种形式中有大约7个面板。很难对这些面板进行概述和更改,因为它们都是相互重叠的 所以我想为每个面板创建一个额外的单元,在这里我可以像我想要的那样设计和更改面板,然后用代码将它们添加到主窗体中 我查看了一个forms fmx文件,为一个面板创建了一个文件,还为面板创建了一个.pas文件 单元2.pas: unit Unit2; interf
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=当然要测试)
我该怎么做,才能让我设计的面板进入主窗体
谢谢您的帮助。
TPanel
不知道如何从表单资源加载子组件。这就是表格和框架的特殊之处。如果您没有访问帧的权限,则可以改为。您可以使用GExperts来帮助您入门。创建一个新窗体,并按照您希望的面板外观进行设计。选择上面的所有组件,并使用GExperts“”工具。这将在剪贴板上放置一些代码。打开面板单元,在构造函数中粘贴生成的代码
constructor TPanel1.Create(AOwner: TComponent);
begin
inherited;
// paste GExperts-generated code here
end;
代码将引用
TPanel1
中尚不存在的字段,因此在类声明中声明缺少的字段。现在,您可以放弃正在设计的表单,或者将其保存以供将来修改设计。只需将更改粘贴到以前的代码上。TPanel
不知道如何从表单资源加载子组件。这就是表格和框架的特殊之处。如果您没有访问帧的权限,则可以改为。您可以使用GExperts来帮助您入门。创建一个新窗体,并按照您希望的面板外观进行设计。选择上面的所有组件,并使用GExperts“”工具。这将在剪贴板上放置一些代码。打开面板单元,在构造函数中粘贴生成的代码
constructor TPanel1.Create(AOwner: TComponent);
begin
inherited;
// paste GExperts-generated code here
end;
代码将引用
TPanel1
中尚不存在的字段,因此在类声明中声明缺少的字段。现在,您可以放弃正在设计的表单,或者将其保存以供将来修改设计。只需将更改粘贴到前面的代码上。我这样做的方法是使用我称之为嵌入式表单的东西,这是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;
(根据需要设置位置和对齐特性)
请注意,如果面板很小,您可以将多个面板添加到单个表单中,并单独设置每个父级,为了更大的面板或更好的模块化,请在每个表单中添加一个。我这样做的方法是使用我称之为嵌入式表单的东西,这是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;
(根据需要设置位置和对齐特性)
请注意,如果面板很小,您可以将多个面板添加到一个表单中,并单独设置每个父级,为了更大的面板或更好的模块化,请在每个表单中添加一个。这就是他们引入框架的原因…同意@whosrdaddy,将每个面板放在每个单元内的一个TFrame中,然后通过1)创建框架,2)将每个框架的父级设置为窗体的主面板,在主窗体上交换它们。我已经写过,这个问题在Firemonkey中。Firemonkey中没有框架。@whosrdaddy:你肯定看到我删除的答案了吗?@AndreasRejbrand:没有看到:)这就是他们引入框架的原因…同意@whosrdaddy,将每个面板放在每个单元的一个TFrame中,然后在主窗体上交换它们1)创建框架,2)将每个帧的父帧设置为窗体的主面板。我已经写过,这个问题在Firemonkey中。Firemonkey中没有框架。@whosrdaddy:你肯定看到我删除的答案了吗?@AndreasRejbrand:没有看到:)这是我经过几个小时的搜索和尝试后发现的。我只建议使用TLayout而不是panel。我认为,TPanel vs.TLayout完全取决于您希望它的外观,它们没有样式,更适合这种动作。当然,您可以嵌入任何控件。例如,TTreeView,如果这是您设计的方便子单元。这是我经过几个小时的搜索和尝试后发现的。我只建议使用TLayout而不是panel。我认为,TPanel vs.TLayout完全取决于您希望它的外观,它们没有样式,更适合这种动作。当然,您可以嵌入任何控件。例如,t查看是否适合您的设计。