【问题标题】:How to clone a TPanel in Delphi FMX application?如何在 Delphi FMX 应用程序中克隆 TPanel?
【发布时间】:2021-07-12 10:56:48
【问题描述】:

我正在使用 FMX 构建应用程序。此应用可在 Windows、Mac OSX 和 Linux 上运行。

我需要克隆一个 TPanel,它包含在另一个 TPanel 中。

FMX 提供的克隆函数报错:

找不到类 TForm1。

如何在 FMX 应用中克隆TPanel

这是我正在使用的代码:

procedure TForm1.Button1Click(Sender: TObject);
var
  CurrentControl, ClonedControl: TFMXObject;
  CtlrNameCnt: String;
begin
  CtlrNameCnt := IntToStr(Panel1.ControlsCount);

  CurrentControl := Panel1;

  ClonedControl := Clone(CurrentControl); //<- this gives error
  ClonedControl.name := CurrentControl.name + '_' + CtlrNameCnt;
  ClonedControl.Parent := Panel1;
end;

【问题讨论】:

  • 如果是 VCL 我会尝试RegisterClass(TForm1)
  • 将有助于备份和发布您的原始问题/错误,而不仅仅是您正在尝试的解决方案中的某些内容。猜测您的原始错误类似于[dcc32 Error] Unit1.pas(30): E2010 Incompatible types: 'TPanel' and 'TFmxObject',然后您将 CurrentControl 的声明添加为 TFMXObject 以解决该错误。
  • 在您的代码中,您实际上是在克隆 TForm1 而不是面板。目前还不清楚应该克隆什么以及克隆的父级应该是什么。
  • Clone 实际上是 Self.Clone 并且您传递的参数成为克隆对象的所有者。不是你想要的。
  • @Brain,没有编译时错误。此错误发生在运行时。

标签: delphi firemonkey


【解决方案1】:

我在代码中犯了两个主要错误。

这是可以正常工作的代码:

procedure TForm1.Button1Click(Sender: TObject);
var
  CurrentControl, ClonedControl: TFMXObject;
  CtlrNameCnt: String;
begin
  CtlrNameCnt := IntToStr(Panel1.ControlsCount);

  CurrentControl := Panel1;

  ClonedControl := Panel2.Clone(CurrentControl); //<- this Works now!
  ClonedControl.name := CurrentControl.name + '_' + CtlrNameCnt;
  ClonedControl.Parent := Panel1;
end;

TIA

杨洋

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-15
    • 2016-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多