3

情報

コンポーネントパッケージを管理し、カスタムプロパティエディタをインストールする方法については、まったく無知なようです。私は先週かそこらで例とチュートリアルを見てきましたが、プロパティエディタがオブジェクトインスペクタに表示されないため、明らかに何か間違ったことをしている必要があります。このフラストレーションを解決するには、段階的な手順が必要です。

コンポーネントパッケージ

現在1つのパッケージがありdesigntime and runtime、オプションでに設定されています。RegisterComponentsこのパッケージに追加されたのは、私のコンポーネント(つまり、MyButton、MyListBoxなど)のユニットです。さらに、プロシージャを含むユニットがあります。これをビルドしてインストールし、コンポーネントを新しいプロジェクトに追加して、問題なく実行できます。

カスタムPropertyEditorの追加

上記のパッケージからコンポーネントにプロパティエディタを導入したいので、トリッキーで混乱します。

たとえば、TMyButtonは、独自のペイントメソッドを使用したカスタムボタンです。ボタンの外観を変更できるようにするプロパティが既に公開されています。さらに、プリセットの外観設定を選択できるようにする公開リストもあります。例:

TMyButtonStyle = (bsStyle1, bsStyle2, bsStyle3)

プリセットスタイルのリストを削除し、代わりに「PresetStyles」というプロパティをオブジェクトインスペクターに追加したいと思います。このプロパティはpaDialogになります。さまざまなボタンのスタイルを視覚的に確認できるフォームを表示したいのですが、単純なリストからプリセットスタイルを選択するよりグラフィカルな方法です。

どのパッケージが必要ですか

私が理解しているなら、あなたはdesigntimeパッケージとruntimeパッケージを分割する必要がありますか?

これは、コンポーネント用とプロパティエディタ用の2つのレジスタユニットが必要であることを意味しますか?

私の現在のパッケージはdesigntime and runtimeであると言ったので、これを管理する方法が完全にはわかりません。どのパッケージタイプに分割すべきかわかりません。プロパティエディタ用に新しいデザインタイムパッケージを作成し、他のパッケージruntimeのみを作成すると、インストールボタンが失われます。今これを書いていても私は混乱しています。

PropertyEditorのインストール

私がフォローしようとした記事の1つは、このページの記事でした:http ://www.delphisources.ru/pages/faq/master-delphi-7/content/LiB0097.html

私が変更したのは、独自のダイアログフォームを追加し、登録コードを次のように変更することだけでした。

RegisterPropertyEditor(TypeInfo(string), TMdSoundButton, 'SoundUp', TSoundProperty);

RegisterPropertyEditor(TypeInfo(string), TMyButton, 'PresetStyles', TSoundProperty);

まだTSoundPropertyと表示されていることはわかっていますが、動作するようになるまでそのままにして、クラス名を変更します。

結論

実際のコンポーネントと設計側、つまりPropertyEditorsの間でパッケージを分割/管理する正しい方法は何ですか?

PropertyEditorがオブジェクトインスペクターのTMyButtonに表示されることはなく、パッケージが正しく構成されていないか何かに関係しているに違いないと感じています。

ここで何らかの支援をいただければ幸いです。非常に優れたチュートリアルガイドへのリンクなど、私が行っていることは何も機能していないように見えますが、多くの例を使用しても機能しません。

4

3 に答える 3

7

現在1つのパッケージがあり、オプションでデザインタイムとランタイムに設定されています。

カスタムプロパティ/コンポーネントエディタを実装するには、コードを2つのパッケージに分割する必要があります。1つruntime onlyコンポーネント自体の実装コードのみを含むパッケージで、もう1つdesigntime onlyはコンポーネント登録とカスタムエディタの実装コードのみを含むパッケージです。designideデザインタイムパッケージは、そのRequiresリストでランタイムパッケージとパッケージを指定する必要があります。ランタイムパッケージは、実行可能ファイルにコンパイルされるものです。デザインタイムパッケージは、IDEがコンポーネントをコンポーネントパレットとフォームデザイナに表示して操作するために使用するものです。

これは、コンポーネント用とプロパティエディタ用の2つのレジスタユニットが必要であることを意味しますか?

いいえ。ランタイムパッケージには登録がまったくないはずです。代わりに、designtimeパッケージに含まれています。すべてを登録する単一のRegister()関数をdesigntimeパッケージに含めることができます。

プロパティエディタ用に新しいデザインタイムパッケージを作成し、他のパッケージをランタイムのみにすると、インストールボタンが失われます。

ランタイムパッケージをIDEにインストールすることはできず、デザインタイムパッケージのみをインストールできます。

私がフォローしようとした記事の1つは、このページの記事でした:http ://www.delphisources.ru/pages/faq/master-delphi-7/content/LiB0097.html

私が変更したのは、独自のダイアログフォームを追加し、登録コードを次のように変更することだけでした。

RegisterPropertyEditor(TypeInfo(string)、TMdSoundButton、'SoundUp'、TSoundProperty);

RegisterPropertyEditor(TypeInfo(string)、TMyButton、'PresetStyles'、TSoundProperty);

TMyButtonコンポーネントは実際に型であるPresetStylesプロパティを定義していますStringか?存在しないプロパティのプロパティエディタを定義することはできません。

プロパティがコンポーネント自体にどのように実装されているか、およびそれが何を表しているかを正確に知らなければ、PresetStylesプロパティのポップアップダイアログを呼び出すことはおそらくあまり意味がありませんString(ファイル名などを除く)。あなたの説明に基づいて、プロパティエディタの代わりにコンポーネントエディタを実装し、既存のものを残す方がおそらく理にかなっていますTMyButtonStyle列挙型プロパティにIDEのデフォルトエディタを使用するには、プロパティのみ。ポップアップダイアログを呼び出すには、コンポーネントエディタを使用して、ユーザーがコンポーネント自体を右クリックし、ポップアップメニューから[編集](または名前を付けると決めた他の文字列値)を選択するか、をダブルクリックします。フォームデザイナのコンポーネント。その後、必要に応じてコンポーネントを表示および編集し、ダイアログを閉じたときにコンポーネントに変更を割り当てることができます。

PropertyEditorがオブジェクトインスペクターのTMyButtonに表示されることはなく、パッケージが正しく構成されていないか何かに関係しているに違いないと感じています。

実際のコードをまだ表示していないため、確実に知ることは困難です。

于 2013-02-05T17:18:22.807 に答える
5

私が理解している場合、デザインタイムパッケージとランタイムパッケージを分割する必要がありますか?

これは、コンポーネント用とプロパティエディタ用の2つのレジスタユニットが必要であることを意味しますか?

いいえ。実行時に登録ユニットが使用されない限り(通常は使用されない限り)、両方のコンポーネントとプロパティエディタを登録する1つの登録ユニットで十分です。これは、プロパティエディタを含むユニットにも当てはまります。実行時に使用DesignEditors.pasしないようにすれば、問題ありません。

于 2013-02-05T15:01:26.823 に答える
2

コンポーネントパッケージ

今日は両方に1つのパッケージを用意してもかまいません。以前は、アプリケーションがランタイムパッケージとともに配布されている場合は、それらを分割して合計サイズを減らすことが理にかなっています。私は今までそれらを分割して、実装と設計インターフェースを分離するのが好きです。

どのパッケージが必要ですか

2つのパッケージがある場合、ランタイムパッケージはデザインタイムパッケージの「Requires」で参照する必要があります。したがって、デザインタイムパッケージを登録するだけで済みます。ランタイムパッケージは、IDEに暗黙的にロードされます。1つのパッケージの場合は、これを登録する必要があります。

PropertyEditorのインストール

最初のパラメータに問題があります。プロパティのtypeinfoである必要があります。

RegisterPropertyEditor(TypeInfo(TMyButtonStyle), TMdSoundButton, 'PresetStyles', TSoundProperty);

TSoundPropertyは、TEnumPropertyから逆スキャンする必要があります。

結論

1つのパッケージで続行します。プロパティは、変更されたコードとともに表示されます。そうでない場合は、プロパティが読み取り専用でないことを確認してください。

于 2013-02-05T15:02:04.703 に答える