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

Delphi用の.gitignore

いろいろな言語・開発環境の.gitignoreを集めたページがあります。

ここにDelphiの.gitignoreもありました。

自分で作る手間が省けました。

C++Builder XE8でExcelを起動してファイルを開く

C++Builder XE8でExcelを起動してファイルを開くコードです。

UnicodeString FileName = L"C:\\tmp\\Book1.xlsx";
Variant Excel = Variant::CreateObject("Excel.Application");
Excel.OlePropertySet("Visible", true);
Variant Workbooks = Excel.OlePropertyGet("Workbooks");
Variant Workbook = Workbooks.OleFunction("Open", WideString(FileName));

RAD Studio XE8 Update1をインストールすると、起動時にDUnitXRuntime220.bplを登録できないと表示される問題について

RAD Studio XE8 Update1をインストールすると、起動時に「パッケージ:C:\~\DUnitXRuntime220.bplを登録できません。このパッケージはデザイン時には使えません。次にプロジェクトを読み込む時にもこのパッケージを読み込みますか?」と表示されるようになりました。

xe8update1

このように表示される時は、引数「-cleanregistry」をつけて起動します。
または、ダイアログが表示される時に「いいえ」を選択します。
そうすると、不要なレジストリが削除され、ダイアログは表示されなくなります。

twitterで教えていただきました。
ありがとうございました。