Delphi 10.1 BerlinのFireMonkeyのグリッドで右寄せや中央揃えで表示する列クラスを作成する

セルごとに表示を細かく制御したい場合は、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を配置します。

grid01

フォームの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;

アプリケーションを実行すると、テキストが指定した位置に表示されます。

grid02

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください