【问题标题】:Custom component controls keep re-creating自定义组件控件不断重新创建
【发布时间】:2015-06-18 10:00:59
【问题描述】:

我是 Firemonkey/自定义控件的新手,如果这是一个平庸的问题或重复的问题,我很抱歉,但我被卡住了,无法弄清楚。

这是我的自定义控件的代码

unit swScheduler;

interface

uses
  System.SysUtils, System.Classes, FMX.Types, FMX.Controls, FMX.StdCtrls,
  FMX.Calendar, FMX.Objects;

type
  TswScheduler = class(TControl)
  private
    { Private declarations }
    paLaterale: TPanel;
    clCalendario: TCalendar;
    paLibero: TPanel;
    paScheduler: TPanel;
    rcSCTop: TRectangle;
  protected
    { Protected declarations }
  public
    { Public declarations }
    constructor Create( AOwner: TComponent ); override;
    destructor Destroy; override;
  published
    { Published declarations }
    property Align default TAlignLayout.None;
    property Enabled;
    property Left;
    property Top;
    property Width;
    property Height;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('CustomControls', [TswScheduler]);
end;

{ TswScheduler }

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


  Self.Width := 650;
  Self.Height := 400;


    paLaterale := TPanel.Create( Self );
    paLaterale.Parent := Self;
    paLaterale.Align := TAlignLayout.Left;
    paLaterale.Width := 202;


    clCalendario := TCalendar.Create( Self );
    clCalendario.Parent := paLaterale;
    clCalendario.Align := TAlignLayout.Top;


    paLibero := TPanel.Create( Self );
    paLibero.Parent := paLaterale;
    paLibero.Align := TAlignLayout.Client;


  paScheduler := TPanel.Create( Self );
  paScheduler.Parent := Self;
  paScheduler.Align := TAlignLayout.Client;


  rcSCTop := TRectangle.Create( Self );
  rcSCTop.Parent := paScheduler;
  rcSCTop.Align := TAlignLayout.Top;
  rcSCTop.Height := 100;

end;

destructor TswScheduler.Destroy;
begin
  inherited;
end;


initialization
  RegisterClass( TswScheduler );

end.

它编译没有错误,但我的问题是我什么时候想使用它。

我在设计时将它放在表单上,​​没有问题/错误

但是当我运行应用程序时它会这样做

如果我在 IDE 中关闭并重新打开 pas 文件,它会做同样的事情

在运行应用程序时...

就像它一次又一次地构造构造函数一样。

我在 Google 上搜索过,但找不到类似 firemonkey 的内容。

我试图改变一些东西,但无法让它发挥作用。

感谢任何提示。提前致谢。

我正在使用 Delphi XE8 和 Firemonkey。

【问题讨论】:

    标签: delphi firemonkey


    【解决方案1】:

    您需要将子组件的stored 属性设置为false。

    paLaterale := TPanel.Create(Self);
    paLaterale.Stored := false;
    etc
    

    【讨论】:

    • 这不是 Firemonkey 特有的。 VCL 控件的行为方式也相同。
    • VCL 组件没有Stored 属性。他们有一个SetSubComponent() 方法代替(FMX 也是如此)。 DFM 流不会创建子组件的实例。
    猜你喜欢
    • 2011-03-31
    • 2018-03-06
    • 2012-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-26
    相关资源
    最近更新 更多