独自の Delphi XE5 カスタム グリッドを設計しています。私は VCL には興味がないので、FireMonkey のみを使用しています。データに対応する必要があるため、LiveBindings は必須です。タスクは複雑なので、非常に具体的な問題だけを尋ねようとします。
序文。FireMonkey (古い VCL と同じように) を拡張するのは少し難しいと思います。インターフェイスを広範囲に使用しますが、オーバーライドできないコードやプライベート メンバーを参照するコードがまだたくさんあります。5 ~ 10 行の動作を変更するためだけに、クラス全体をコピーする必要があることに気付きました。
私が今持っているのは(ME.Grid)です:
TCustomGrid -> TMECustomGrid -> TMEGrid (my custom grid)
TColumn -> TMEColumn -> TMExxxColumn (specific custom column classes)
Txxx -> TMExxxCell (specific custom grid cell classes)
すべて RegisterFmxClasses に登録されています。TMEGrid も RegisterComponents に登録されます。
私も持っています (ME.Bind.Grid):
TMELinkGridColumnDescription = Class(TLinkGridColumnDescription)
TMELinkGridToDataSourceControlManager = Class(TInterfacedObject,
ILinkGridToDataSourceControlManager)
TMELinkGridToDataSourceColumnFactory = Class(TLinkGridToDataSourceColumnFactory)
...後者は RegisterLinkGridToDataSourceColumnFactory に登録されます
これらすべてを最小限の実装で実現します。後で動作を追加/変更します。私の目標は、TMEGrid をフォームにドロップし、いくつかのデータセットをドロップして、バインディングでグリッドを処理することです。
(アプリケーションの起動時に) 表示されるのは、EBindCompError 'No list control editor available' です。
これは TGrid から TMEGrid を派生させたときに機能したため (これは他の理由で受け入れられませんでした)、調べてみたところ、Bind.Editors が (TCustomGrid ではなく) TGrid を明示的に参照していることに気付きました。だから私は自分自身を書いた(ME.Bind.Editors):
TMEBindListGridEditor = Class(TBindListEditorCommon,
IBindListVirtualEditor,
IBindGridEditor,
IBindListVirtualEditorScope)
TMEBindGridEditorFactory = Class(TBindEditorFactory)
...後者は RegisterBindEditorFactory に登録されます
しかし、これは何も変わっていないようでした。それでも同じエラー メッセージが表示されます。
何か案は?
すべてのコンポーネント、ファクトリなどは独自のパッケージ (MEComps) に含まれていることに注意してください。プロジェクトには、グリッドとその他のもの (ナビゲーター、いくつかのボタン) を備えた 1 つのフォームしかありません。
編集:手がかりを見つけたと思います。テスト プロジェクト内からソースを確認したところ、
RegisterBindEditorFactory([TMEBindGridEditorFactory]);
コード行はプロジェクトにコンパイルされません (そこにブレーク ポイントを配置できません)。明らかにそれはプロジェクトに取り込まれていませんが、これは確かに良い兆候ではありません. そこで、対応するユニット (FMX.Bind.Editors) が使用されている場所を確認したところ、この非常に興味深い BindCompFMXReg ユニットが見つかりました。これを研究して、どこかに到達できるかどうかを確認します。