Delphi XE8でFireMonkeyのグリッドで文字列を中央揃えで表示するには

Delphi XE8でFireMonkeyのグリッドのセルの表示をカスタマイズする方法を紹介します。

例としてセルの文字列を中央揃えで表示してみます。

grid-2

FireMonkeyのグリッドの描画を変更するには、OnDrawColumnCellイベントを使用します。

procedure TForm1.Grid1DrawColumnCell(Sender: TObject; const Canvas: TCanvas;
  const Column: TColumn; const Bounds: TRectF; const Row: Integer;
  const Value: TValue; const State: TGridDrawStates);
const
  HorzTextMargin = 2;
  VertTextMargin = 1;
var
  R: TRectF;
begin
  R := Bounds;
  R.Inflate(-HorzTextMargin, -VertTextMargin);
  Canvas.Fill.Color := TAlphaColorRec.Black;
  Canvas.FillText(R, 'セルの値', False, 1.0, [], TTextAlign.Center);
end;

grid-1

または、セルのクラスにIDrawableCellインターフェースを継承し、DrawCellメソッドで描画します。

type
  /// <summary>
  ///   文字列を中央揃えで表示するセル
  /// </summary>
  TCenterTextCell = class(TTextCell, IDrawableCell)
  private
    procedure BeforeDrawing(const Canvas: TCanvas);
    procedure AfterDrawing(const Canvas: TCanvas);
    procedure DrawCell(const Canvas: TCanvas; const Bounds: TRectF;
      const Row: Integer; const Value: TValue; const State: TGridDrawStates);
  end;

{ TCenterTextCell }

procedure TCenterTextCell.AfterDrawing(const Canvas: TCanvas);
begin

end;

procedure TCenterTextCell.BeforeDrawing(const Canvas: TCanvas);
begin

end;

procedure TCenterTextCell.DrawCell(const Canvas: TCanvas; const Bounds: TRectF;
  const Row: Integer; const Value: TValue; const State: TGridDrawStates);
const
  HorzTextMargin = 2;
  VertTextMargin = 1;
var
  R: TRectF;
begin
  R := Bounds;
  R.Inflate(-HorzTextMargin, -VertTextMargin);

  Canvas.Fill.Color := TAlphaColorRec.Black;
  Canvas.FillText(R, 'セルの値', False, AbsoluteOpacity, [], TTextAlign.Center);
end;

セルにTCenterTextCellクラスを使用するため、列クラスを作成します。

type
  /// <summary>
  ///   TCenterTextCellを使用する列
  /// </summary>
  TCenterTextColumn = class(TColumn)
  protected
    function CreateCellControl: TStyledControl; override;
  end;

function TCenterTextColumn.CreateCellControl: TStyledControl;
begin
  Result := TCenterTextCell.Create(Self);
end;

TCenterTextColumnクラスをグリッドに追加します。

procedure TForm1.FormCreate(Sender: TObject);
begin
  Grid1.AddObject(TCenterTextColumn.Create(Self));
  Grid1.AddObject(TCenterTextColumn.Create(Self));
end;

grid-2

コメントを残す

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

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