Delphi XE8 FireMonkey – TStringGridのセル(Cell)の描画をカスタマイズする

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;

grid-1

他の方法として、セルの描画をカスタマイズしたセルのクラスを作成します。

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を追加します。

grid-3

grid-2

コメントを残す

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

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