セルごとに表示を細かく制御したい場合は、TGridのOnDrawColumnCellイベントを使用します。
列ごとに右寄せや中央揃えが決まっているのであれば、専用の列クラスを作成すると便利です。
列クラスはFMX.GridユニットのTColumnクラスを継承して作成します。
type
TTextAlignColumn = class(FMX.Grid.TColumn)
end;
テキストの位置揃えを指定するためのプロパティを作成します。
type
TTextAlignColumn = class(FMX.Grid.TColumn)
private
FHorizontalAlign: TTextAlign;
published
property HorizontalAlign: TTextAlign read FHorizontalAlign
write FHorizontalAlign;
end;
設定したテキストの位置揃えは、描画の直前にBeforeDrawingメソッドでTTextLayoutに反映します。
type
TTextAlignColumn = class(FMX.Grid.TColumn)
private
FHorizontalAlign: TTextAlign;
protected
procedure BeforeDrawing(const Canvas: TCanvas); override;
published
property HorizontalAlign: TTextAlign read FHorizontalAlign
write FHorizontalAlign;
end;
procedure TTextAlignColumn.BeforeDrawing(const Canvas: TCanvas);
begin
inherited;
Layout.HorizontalAlign := FHorizontalAlign;
end;
Paddingなどの設定も、BeforeDrawingで行うといいでしょう。
procedure TTextAlignColumn.BeforeDrawing(const Canvas: TCanvas);
begin
inherited;
Layout.HorizontalAlign := FHorizontalAlign;
Layout.Padding.Right := 5;
end;
次のサンプルアプリケーションは、左寄せ・中央揃え・右寄せで表示します。
フォームにTGridを配置します。
フォームのOnCreateイベントで列を追加します。
procedure TForm1.FormCreate(Sender: TObject);
var
Column: TTextAlignColumn;
begin
Grid1.Row := 20;
Column := TTextAlignColumn.Create(Grid1);
Column.HorizontalAlign := TTextAlign.Leading;
Grid1.AddObject(Column);
Column := TTextAlignColumn.Create(Grid1);
Column.HorizontalAlign := TTextAlign.Center;
Grid1.AddObject(Column);
Column := TTextAlignColumn.Create(Grid1);
Column.HorizontalAlign := TTextAlign.Trailing;
Grid1.AddObject(Column);
end;
グリッドのOnGetValueでセルの値を設定します。
procedure TForm1.Grid1GetValue(Sender: TObject; const ACol, ARow: Integer;
var Value: TValue);
begin
Value := Format('%d %d', [ACol, ARow]);
end;
アプリケーションを実行すると、テキストが指定した位置に表示されます。