Delphi无法拖放自定义组件

时间:2017-10-10 19:48:12

标签: delphi

我已经为IDE编写了一些组件,它们看起来像这样:

unit xxx;

interface

uses
 System.Classes, System.SysUtils;

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

implementation

end.

通过这种方式,我可以在VCL和FMX上使用它们;换句话说,我可以制作VCL获胜计划和使用我的组件的FMX And​​roid应用程序。你看不到的代码是类的实现,但这并不重要。

  1. 当我启动VCL项目时,我可以拖放我的组件并使用它们。
  2. 当我启动FMX win32项目时,我可以拖放我的组件并使用它们。如果我将平台切换到Android,组件仍然存在,我可以成功编译。顺便说一下,我无法拖放组件。为什么?
  3. 在第2点我的意思是在FMX win32下我有这样的组件:

    enter image description here

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

    enter image description here

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

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

1 个答案:

答案 0 :(得分:4)

您只需要包含<!DOCTYPE html> <html> <head> <script> function init() { var num = prompt("Enter a number"); if (num != null) { document.getElementById("here").innerHTML = num ; } } </script> </head> <body onload="init()"> <h1>We math!</h1> Your number is <p id ="here">MEMEME</p> perfect! </body> </html>(您已经从我看到的内容中获得),然后可以使用此属性:

System.Classes

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

  

ComponentPlatformsAttribute为组件构建器提供了更具体的功能   控制暴露的组件。

要解决问题,您应该:

  1. 打开组件的项目
  2. 右键单击项目管理器中的组件&gt;单击卸载
  3. 在类定义上方添加属性
  4. 保存所有内容,编译,构建和安装。
  5. 您可以找到更多参数传递给属性的构造函数,我已在type [ComponentPlatformsAttribute(pidWin32 or pidAndroid)] TTestComponent = class(TComponent) //... end; pas文件中找到它们:

    System.Classes

    如果要包含每个平台,有一个答案here可以提供帮助,您可以将0传递给属性的构造函数,如 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; 。它似乎有效,但我不会使用它,我更喜欢逐个声明平台,即使它可能很乏味!