「Team Japan » FireMonkey – TStringGridのセル(Cell)の描画をカスタマイズする」をDelphi XE8で書き直してみました。
セルの描画をカスタマイズするには、グリッドのOnDrawColumnCellイベントにセルを描画する処理を記述します。
procedure TForm1.Grid1DrawColumnCell(Sender: TObject; const Canvas: TCanvas;
const Column: TColumn; const Bounds: TRectF; const Row: Integer;
const Value: TValue; const State: TGridDrawStates);
begin
Canvas.Stroke.Kind := FMX.Graphics.TBrushKind.bkSolid; // 単色
Canvas.Stroke.Color := TAlphaColorRec.Lime; // ライム色
Canvas.StrokeThickness := 3; // ストロークアウトラインの幅
Canvas.DrawRect(Bounds, 20, 20, AllCorners, 1.0, TCornerType.Round); // 楕円を描く
end;
他の方法として、セルの描画をカスタマイズしたセルのクラスを作成します。
type
/// <summary>
/// 楕円を表示するセル
/// </summary>
TRoundCell = 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;
procedure TRoundCell.AfterDrawing(const Canvas: TCanvas);
begin
end;
procedure TRoundCell.BeforeDrawing(const Canvas: TCanvas);
begin
end;
procedure TRoundCell.DrawCell(const Canvas: TCanvas; const Bounds: TRectF;
const Row: Integer; const Value: TValue; const State: TGridDrawStates);
begin
Canvas.Stroke.Kind := FMX.Graphics.TBrushKind.Solid; // 単色
Canvas.Stroke.Color := TAlphaColorRec.Lime; // ライム色
Canvas.StrokeThickness := 3; // ストロークアウトラインの幅
Canvas.DrawRect(Bounds, 20, 20, AllCorners, 1.0, TCornerType.Round); // 楕円を描く
Canvas.Fill.Color := TAlphaColorRec.Black;
Canvas.FillText(Bounds, 'セルの値', False, AbsoluteOpacity, [], TTextAlign.Center);
end;
FMX.Grid.TStringColumnクラスを継承し、セルにTRoundCellクラスを使用する列。
type
/// <summary>
/// TRoundCellを使用する列
/// </summary>
TStringColumn = class(FMX.Grid.TStringColumn)
protected
function CreateCellControl: TStyledControl; override;
end;
function TStringColumn.CreateCellControl: TStyledControl;
begin
Result := TRoundCell.Create(Self);
end;
フォームにグリッドを配置し、グリッドにTStringColumnを追加します。