私は XE2 のいくつかのコンポーネントに取り組んでいます。コンポーネントがドロップされたフォームの uses 句に、コンポーネントのユニット以上のものを追加することは可能ですか?
例: ビルドしてインストールしたパッケージから TCustomComponent を選択すると、ユニット CustomComponent がフォームの uses 句に追加されます。ユニット GlobalConstants も追加したいと思います。
これができるかどうか誰にもわかりますか?
私は XE2 のいくつかのコンポーネントに取り組んでいます。コンポーネントがドロップされたフォームの uses 句に、コンポーネントのユニット以上のものを追加することは可能ですか?
例: ビルドしてインストールしたパッケージから TCustomComponent を選択すると、ユニット CustomComponent がフォームの uses 句に追加されます。ユニット GlobalConstants も追加したいと思います。
これができるかどうか誰にもわかりますか?
コンポーネントの設計時パッケージを作成します (まだ作成していない場合)。そのパッケージで、ISelectionEditor
インターフェイスを実装するクラスを作成し (最も簡単な方法は、クラスから派生させることですTSelectionEditor
)、その仮想メソッドをオーバーライドして、コンポーネントを使用する Form/Frame/DataModuleRequiresUnits()
の句に表示する追加のユニットを報告します。 uses
. 次に、 ( に加えて)Register()
を呼び出して、パッケージの関数にそのクラスを登録させます。RegisterSelectionEditor()
RegisterComponents()
Indy 10TIdTCPServer
は、 、TIdCmdTCPClient
、およびTIdUDPServer
コンポーネントに対して正確にこれを行い、IdContext
およびユニットが句IdSocketHandle
に追加されるようにします。およびユニットを見て、Indy がこれをどのように実装しているかを確認してくださいuses
。IdCoreSelectionEditors.pas
IdRegisterCore.pas
更新:IdCoreSelectionEditors.pas
およびユニットは、2014 年 3 月に Indy 10 から削除されました。コンポーネントごとの SelectionEditor クラスはすべて、ユニット自体IdProtocolsSelectionEditors.pas
に実装された新しい単一のクラスに置き換えられました。IdRegisterCore
この新しい SelectionEditor クラスは、すべての Indy コンポーネントに登録され、すべてのパラメーターのデータ型の RTTI を使用して、設計時に配置された任意の Indy コンポーネントのすべてのインスタンスを探し、割り当てられたイベント ハンドラーがどれを知るかを知るために値を返します。uses
節に含めるために報告する単位。