私の目標は、LiveBindings を介して TClientDataSet に接続された、いくつかの列を持つ TGrid を持つことです。列の 1 つは TProgressColumn 型です。
グリッドにはデータが表示されますが、進行状況バーの列には何も表示されません (つまり、進行状況 0%)。
TProgressColumn は ftInteger 型のフィールドに接続されています。このフィールドの値は 0 ~ 100 です。
ftSingle で試してみましたが、うまくいきませんでした。TLinkGridToDataSourceBindSourceDB/Columns の下にある ColumnStyle プロパティを使用して、列のタイプを TProgressColumn に設定します。
奇妙なことに、TPrototypeBindSource を使用して値を生成すると、TProgressColumn は機能しますが、ftUInteger 値に対してのみ機能します。ftInteger ジェネレーターでは失敗します。
ここに小さなデモがあります (Delphi XE7):
TProgressCell.DrawCell() にブレークポイントを設定し、Value.IsOrdinal と Value.IsType の 2 つの条件をステップ オーバーすると、スキップされ、ClampValue は 0 である値「Min」を受け取ります。渡された値に何か問題があるようです。関数に。
TProgressColumn を使用する際に何か特別なことはありますか? TLinkGridToDataSourceColumn で CustomFormat、CustomParse を使用する必要がありますか?
それはバグですか、それとも何か見逃していますか?
UPDATE: 「のんぱ」のおかげで謎が解けました!
実際、「asInteger」は TField クラスのよく知られたプロパティです。
someDataSet.fieldByName('myFieldName').asInteger
CustomFormat プロパティでは、self.asInteger プロパティを含む多くのものにアクセスできます。詳細はこちら: