gpt4 book ai didi

Delphi无法拖放自定义组件

转载 作者:行者123 更新时间:2023-12-03 15:51:30 26 4
gpt4 key购买 nike

我为 IDE 编写了一些组件,它们看起来都是这样的:

unit xxx;

interface

uses
System.Classes, System.SysUtils;

type
TMyClass = class(TComponent)
//code...
end;

implementation

end.

这样我就可以在VCL和FMX上使用它们;换句话说,我可以制作一个使用我的组件的 VCL win 程序和 FMX And​​roid 应用程序。您看不到的代码是类的实现,但这并不重要。

  1. 当我启动 VCL 项目时,我可以拖放组件并使用它们。
  2. 当我启动 FMX win32 项目时,我可以拖放组件并使用它们。如果我将平台切换到 Android,该组件仍然存在,并且我可以成功编译。顺便说一句,我无法拖/放组件。为什么?

在第 2 点中,我的意思是在 FMX win32 下我有这样的组件:

enter image description here

如果我改变平台(比如android)我会得到这个

enter image description here

我做错了什么?我进入 IDE > 工具 > 选项 > 库,并为每个平台添加了 IDE 可以在其中找到带有源的 .pas 的路径。有什么想法吗?

奇怪的是,在 FMX 下,如果我希望能够使用我的组件创建 Android 应用程序,我必须将平台更改为 win32,拖放组件,然后更改回 Android。该组件在 Android 上也运行得很好。

最佳答案

您只需要包含System.Classes(据我所知,您已经拥有它),然后务必使用此属性:

type
[ComponentPlatformsAttribute(pidWin32 or pidAndroid)]
TTestComponent = class(TComponent)
//...
end;

通过这种方式,即使您已切换到 Android,您也可以将组件从 IDE 拖放到 View 中。基本上,您的代码很好,并且可以与 VCL 和 FMX 配合使用,但是通过该属性,您可以告诉 IDE 该组件与您指定的平台兼容。

ComponentPlatformsAttribute gives component builders more specific control over the exposed components.

要解决该问题,您应该:

  1. 打开您的组件的项目
  2. 右键单击项目管理器中的组件 > 单击“卸载”
  3. 在类定义上方添加属性
  4. 保存全部、编译、构建并安装。

您可以找到更多参数来传递给属性的构造函数,我在 System.Classes pas 文件中找到了它们:

  pidWin32        = $0001;
pidWin64 = $0002;
pidOSX32 = $0004;
pidiOSSimulator = $0008;
pidAndroid = $0010;
pidLinux32 = $0020;
pidiOSDevice32 = $0040;
pidiOSDevice = pidiOSDevice32;// deprecated 'Use pidiOSDevice32';
pidLinux64 = $0080;

pidWinNX32 = $0100;
pidWinIoT32 = $0200; // Embedded IoT (Internet of Things) Windows w/ Intel Galileo
pidiOSDevice64 = $0400;
pidWinARM = $0800;
pidOSX64 = $1000;
pidOSXNX64 = pidOSX64 deprecated 'Use pidOSX64';
pidLinux32Arm = $2000;
pidLinux64Arm = $4000;
pidAndroid64 = $8000;

有一个答案here如果您想包含每个平台,这会很有帮助,您可以将 0 传递给属性的构造函数,例如 [ComponentPlatformsAttribute(0)]。看起来它有效,但我不会使用它,我更喜欢一一声明平台,即使它可能很乏味!

关于Delphi无法拖放自定义组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46674792/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com