私からのさらに別の TFrame IDE 登録コンポーネントの質問です。助けてくれてありがとう、仲間のプログラマー。: )
ここでダリアンの TFrame 継承の提案をいじってみましょう:
仕様:
基本的に、私は IDE に登録した TFrame ベースのコンポーネントを持っていますが、それは素晴らしく機能しました。私は現在、既存のコンポーネントの非ビジュアル機能とプロパティの大部分を共有するいくつかの「姉妹」コンポーネントを開発しています。したがって、その多くを、新しいコンポーネントと古いコンポーネントの両方が継承できる親/スーパークラスに移動することは理にかなっています。
このようにTFrameの継承を「リファクタリング」する最良の方法は何ですか? (これは TForm クラスの子孫にも当てはまるかもしれませんが、確かではありません)。注意点や注意点は?
例:
たとえば、何もない新しい TFrame を作成し、そのフレーム TMyBaseFrame を呼び出してみました。次に、既存のコンポーネント (TMyFrameTreeView と呼びましょう) のクラス定義を、TFrame ではなくそれから継承するように変更しました。
正常にコンパイルされましたが、フォームにドロップしようとすると、「ClientHeight not found」(または「ClientHeight property not found」) が表示され、フォームにドロップされませんでした。関連する DFM から ClientHeight と ClientWidth を削除すると大混乱が生じ、いずれにせよサイズ変更時に置き換えられました。子孫クラスの ExplicitHeight と ExplicitWidth に気付き、継承された値からのプロパティ値のオーバーライドに関連していると考えていますが、よくわかりません。New -> Inherited Items を介してまったく新しいフレームを再作成し、すべてをコピーしても、まだ良い結果が得られていません。
ファイナルノート
これは、DFM ファイルのストリーミングや複数世代の子孫などで、すぐに厄介になる可能性があることを理解しています....これが、全体的な「注意すべきこと」の概念的な側面を求めている理由の一部ですが、特定の問題の現実世界のより単純なバージョンも同様です(私には、実行可能なはずです)。
学習の試みでハックするための小さなテスト パッケージを作成し、多くのことを学んでいますが、それはゆっくりと進んでおり、Delphi の「ジェダイ マスター」からのガイダンス/洞察は、最も高く評価されます。: )
回答の更新は後で:
以下の両方の回答が役に立ちました。同様に、通常の TFrame からの変更がない「ベース フレーム クラス」を作成し、プロパティやメソッドなどを追加する前にそれを継承すると、継承ストリーミングが非常に安定するようです。理由はわかりませんが、これまでのところそうです。