4

私の目標は、LiveBindings を介して TClientDataSet に接続された、いくつかの列を持つ TGrid を持つことです。列の 1 つは TProgressColumn 型です。

グリッドにはデータが表示されますが、進行状況バーの列には何も表示されません (つまり、進行状況 0%)。

TProgressColumn は ftInteger 型のフィールドに接続されています。このフィールドの値は 0 ~ 100 です。

ftSingle で試してみましたが、うまくいきませんでした。TLinkGridToDataSourceBindSourceDB/Columns の下にある ColumnStyle プロパティを使用して、列のタイプを TProgressColumn に設定します。

奇妙なことに、TPrototypeBindSource を使用して値を生成すると、TProgressColumn は機能しますが、ftUInteger 値に対してのみ機能します。ftInteger ジェネレーターでは失敗します。

ここに小さなデモがあります (Delphi XE7):

TProgressColumn の問題

TProgressCell.DrawCell() にブレークポイントを設定し、Value.IsOrdinal と Value.IsType の 2 つの条件をステップ オーバーすると、スキップされ、ClampValue は 0 である値「Min」を受け取ります。渡された値に何か問題があるようです。関数に。

TProgressColumn を使用する際に何か特別なことはありますか? TLinkGridToDataSourceColumn で CustomFormat、CustomParse を使用する必要がありますか?

それはバグですか、それとも何か見逃していますか?

UPDATE: 「のんぱ」のおかげで謎が解けました!

実際、「asInteger」は TField クラスのよく知られたプロパティです。

someDataSet.fieldByName('myFieldName').asInteger

TProgressColumn - 解決済み!

CustomFormat プロパティでは、self.asInteger プロパティを含む多くのものにアクセスできます。詳細はこちら:

  1. LiveBinding でのカスタム フォーマットおよび解析式の使用
  2. TLinkPropertyToField コンポーネントの CustomFormat プロパティでバインディング式を使用する
  3. フィールドのフォーマット
  4. 整数フィールドをブール値として扱うには?
4

1 に答える 1

2

値はデフォルトで文字列ですが、問題は整数フィールドではありません。プロパティ CustomFormat に AsInteger と記述します。値は整数として取得され、進行状況が表示されます。

于 2014-09-09T13:48:53.553 に答える