13

私は XE2 のいくつかのコンポーネントに取り組んでいます。コンポーネントがドロップされたフォームの uses 句に、コンポーネントのユニット以上のものを追加することは可能ですか?

例: ビルドしてインストールしたパッケージから TCustomComponent を選択すると、ユニット CustomComponent がフォームの uses 句に追加されます。ユニット GlobalConstants も追加したいと思います。

これができるかどうか誰にもわかりますか?

4

1 に答える 1

16

コンポーネントの設計時パッケージを作成します (まだ作成していない場合)。そのパッケージで、ISelectionEditorインターフェイスを実装するクラスを作成し (最も簡単な方法は、クラスから派生させることですTSelectionEditor)、その仮想メソッドをオーバーライドして、コンポーネントを使用する Form/Frame/DataModuleRequiresUnits()の句に表示する追加のユニットを報告します。 uses. 次に、 ( に加えて)Register()を呼び出して、パッケージの関数にそのクラスを登録させます。RegisterSelectionEditor()RegisterComponents()

Indy 10TIdTCPServerは、 、TIdCmdTCPClient、およびTIdUDPServerコンポーネントに対して正確にこれを行い、IdContextおよびユニットが句IdSocketHandleに追加されるようにします。およびユニットを見て、Indy がこれをどのように実装しているかを確認してくださいusesIdCoreSelectionEditors.pasIdRegisterCore.pas

更新:IdCoreSelectionEditors.pasおよびユニットは、2014 年 3 月に Indy 10 から削除されました。コンポーネントごとの SelectionEditor クラスはすべて、ユニット自体IdProtocolsSelectionEditors.pasに実装された新しい単一のクラスに置き換えられました。IdRegisterCoreこの新しい SelectionEditor クラスは、すべての Indy コンポーネントに登録され、すべてのパラメーターのデータ型の RTTI を使用して、設計時に配置された任意の Indy コンポーネントのすべてのインスタンスを探し、割り当てられたイベント ハンドラーがどれを知るかを知るために値を返します。uses節に含めるために報告する単位。

于 2013-01-15T06:55:16.620 に答える