Delphi XE8でFireMonkeyのグリッドのセルの表示をカスタマイズする方法を紹介します。
例としてセルの文字列を中央揃えで表示してみます。
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;
または、セルのクラスに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;