2

独自の 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 ユニットが見つかりました。これを研究して、どこかに到達できるかどうかを確認します。

4

1 に答える 1