2017-10-10 8 views
3

カスタムコンポーネントをドラッグ&ドロップすることはできません:私はVCLとFMXの上にそれらを使用することができます。このようにDelphiは、私はIDEのためのいくつかのコンポーネントを書かれており、それらすべてがこのようになり

unit xxx; 

interface 

uses 
System.Classes, System.SysUtils; 

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

implementation 

end. 

。つまり、コンポーネントを使用するVCL winプログラムとFMX And​​roidアプリを作ることができます。表示されないコードはクラスの実装ですが、それは重要ではありません。

  1. VCLプロジェクトを開始すると、コンポーネントをドラッグ&ドロップして使用できます。
  2. FMX win32プロジェクトを開始すると、コンポーネントをドラッグ&ドロップして使用できます。プラットフォームをAndroidに切り替えると、コンポーネントはまだそこにあり、私は成功してコンパイルできます。ところで、私はコンポーネントをドラッグ/ドロップすることはできません。どうして?私はこの

    enter image description here

    を取得し、私はプラットフォームを変更する場合は

    enter image description here

    (言うアンドロイド):

はポイント2では、私はFMXのWin32で私はこのようなコンポーネントを持っていることを意味します

私は間違って何をしていますか?私はIDE>ツール>オプション>ライブラリに行き、各プラットフォームに対して、IDEがソースを持つ.pasを見つけることができるパスを追加しました。何か案が?

私のコンポーネントでAndroidアプリケーションを作成できるようにするには、プラットフォームをwin32に変更してコンポーネントをドラッグアンドドロップしてからAndroidに戻す必要があるということです。このコンポーネントはAndroidでもうまく機能します。

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

このようにあなたがからコンポーネントをドラッグ&ドロップすることができます:あなたは、この属性を使用するusureことが、その後System.Classesを含める必要があります(まだ、私が見ることができるものからそれを持っている)と

+0

あなたは 'TLang'コンポーネントを意味します – Sami

+0

数値クラスを非ビジュアルコンポーネントとして実装するのは大変な誤りです。 'TObject'から派生させてあなたの問題をすべて解決してください。 –

+2

あなたは[Views](http://docwiki.embarcadero.com/RADStudio/ja/Using_FireMonkey_Views)を利用していますか?マスタービューまたはAndroidビューにコンポーネントをドロップしていますか?また、['ComponentPlatforms'](http://docwiki.embarcadero.com/Libraries/en/System.Classes.ComponentPlatformsAttribute)属性でコンポーネントにマークを付けることで、コンポーネントが実際にサポートしているプラ​​ットフォームをIDEが知るようにする必要があります。 –

答えて

5

あなたがAndroidに切り替えた時でさえ、IDEをビューに追加します。基本的にコードは問題なく、VCLとFMXでも動作しますが、その属性を使用すると、コンポーネントが指定したプラットフォームと互換性があることがIDEに伝えられます。

ComponentPlatformsAttributeは、コンポーネントビルダーに、より具体的には、露出したコンポーネントを制御します。

、あなたがしなければならない問題の修正:オープンコンポーネントのプロジェクト

    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がありますすべての単一のプラットフォームを含めると、[ComponentPlatformsAttribute(0)]のような属性のコンストラクタに0を渡すことができます。それは動作すると思われるが、私はそれを使用しないだろう、私は退屈なことができる場合でも、プラットフォームを一つずつ宣言することを好む!

  • 関連する問題