これをもう少しいじって、私の問題に答える解決策を見つけました
通貨記号は、データセット フィールドの OnGetText イベントを使用して取得し、書式設定された文字列を返します。
procedure FDTableMyCurrFieldGetText(Sender: TField; var Text: string;
DisplayText: Boolean);
begin
DisplayText := True;
Text := FloatToStrF(Sender.AsCurrency, ffCurrency, 18, 2);
end;
Grid OnPainting イベントでこれを行うこともできましたが、この方法で行うと、リンクされたすべてのコントロールとグリッドのフィールドがフォーマットされます。「FDTableMyCurrField」ではなく「Sender」を使用してフィールドを参照し、データセット内の他のすべての通貨フィールドの OnGetText イベントをこのメソッドにポイントできるようにします。
残りの書式設定はグリッドで行われます。グリッドのセルは明示的に公開されていませんが、「TTextCell(Grid1.Columns[I].Children[J])」のように取得できます。Grid OnPaintingイベントを使用して、セルが描画される直前にセルをフォーマットします。
右揃えは、グリッド内のセルの配置を設定することによって実現されます。
セルのテキストの色は、スタイルを使用して設定されます。アプリケーション StyleBook で「textcellnegativestyle」を作成する必要があります。これは、「前景」ブラシの色が赤であることを除いて、デフォルトの「textcellstyle」と同じです。デスクトップ アプリケーションでは、アプリケーションに TEdit をドロップし、それを右クリックして [カスタム スタイルの編集...] を選択し、「editstyle」に基づいてカスタム スタイルに「textcellnegativestyle」という名前を付けますが、フォアグラウンド ブラシの色を赤に変更するだけです。 .
私は、この理由により、「カスタム スタイルの編集」が Delphi フォーム エディタのポップアップ メニュー オプションに表示されないモバイル アプリです。カスタム スタイルを追加するには、メモ帳またはテキスト エディタで .style ファイル (のコピー) を編集する必要があります。
- 「textcellstyle」オブジェクトをコピーして貼り付けます
- 貼り付けたオブジェクトの名前を「textcellnegativestyle」に編集します
- 「前景」ブラシの色を赤に変更します。
- 編集したファイルをアプリケーション StyleBook に読み込みます。
これが私の .style ファイルでどのように見えるかです:
object TLayout
StyleName = 'textcellnegativestyle'
DesignVisible = False
Height = 50.000000000000000000
Width = 50.000000000000000000
object TLayout
StyleName = 'content'
Align = alContents
Locked = True
Height = 42.000000000000000000
Margins.Left = 4.000000000000000000
Margins.Top = 4.000000000000000000
Margins.Right = 4.000000000000000000
Margins.Bottom = 4.000000000000000000
Width = 42.000000000000000000
end
object TBrushObject
StyleName = 'foreground'
Brush.Color = claRed
end
object TBrushObject
StyleName = 'selection'
Brush.Color = x7F72B6E6
end
object TFontObject
StyleName = 'font'
end
end
Grid OnPainting イベントを使用して、セルの配置とスタイルを設定します。ここに私の実用的なソリューションがあります:
procedure TFormMain.Grid1Painting(Sender: TObject; Canvas: TCanvas;
const ARect: TRectF);
var
I, J: Integer;
T: TTextCell;
begin
// my Column 0 is text, all other columns are money in this example
for I := 1 to Grid1.ColumnCount - 1 do
for J := 0 to Grid1.Columns[I].ChildrenCount- 1 do
begin
T := TTextCell(Grid1.Columns[I].Children[J]);
// set the Cell text alignment to right align
T.TextAlign := TTextAlign.taTrailing;
// test the Cell string for a negative value
if (T.Text[1] = '-') then
begin
// remove the leading minus sign
T.Text := Copy(T.Text, 2, Length(T.Text) - 1);
// set the font to red using the style
T.StyleLookup := 'textcellnegativestyle';
end
else T.StyleLookup := 'textcellstyle';
end;
end;