AdvStringGrid ことはじめ

前回紹介した AdvStringGrid を実際に使ってみましょう。

インストールは Setup.exe 実行で一発、難しくはありません。
Delphi を起動し、新規アプリケーションを作成します。フォームに TAdvStringGrid をひとつ配置します(TMS Grids タブにあります)。コンポーネント名が「AdvStringGrid1」と長ったらしいので、Name プロパティを「Grid」にしておきます。

http://m5s.jp/htn/86p/AdvGrid.png

続いて、オブジェクトインスペクタでプロパティを以下のように変更します。

プロパティ名
ColumnHeader
始点
終点
列車名
開業年
DefaultColWidth 80
DefaultRowHeight 45
EnableHtml False
FixedFont フォントを「MS ゴシック」に、文字セットを「日本語」に
Font フォントを「MS ゴシック」に、文字セットを「日本語」に
RowCount 6
RowHeader
東北新幹線
上越新幹線
山形新幹線
秋田新幹線
長野新幹線

ColumnHeaderRowHeader の最初の行は空行です。ここまでの作業を行うと、フォーム上のグリッドが下の図のようになっているはずです(グリッドやフォームの大きさは適当に調整)。

http://m5s.jp/htn/86p/AdvGrid2.png

次に、フォームの OnClick イベントに以下のコードを記述してください。

procedure TForm1.FormCreate(Sender: TObject);
begin
  with Grid do
  begin
    Cells[1, 1] := '東京';
    Cells[2, 1] := '八戸';
    Cells[3, 1] := 'はやて'#13#10'やまびこ'#13#10'なすの';
    Ints[4, 1]  := 1982;

    Cells[1, 2] := '大宮';
    Cells[2, 2] := '新潟';
    Cells[3, 2] := 'とき'#13#10'たにがわ';
    Ints[4, 2]  := 1982;

    Cells[1, 3] := '福島';
    Cells[2, 3] := '新庄';
    Cells[3, 3] := 'つばさ';
    Ints[4, 3]  := 1992;

    Cells[1, 4] := '盛岡';
    Cells[2, 4] := '秋田';
    Cells[3, 4] := 'こまち';
    Ints[4, 4]  := 1997;

    Cells[1, 5] := '高崎';
    Cells[2, 5] := '長野';
    Cells[3, 5] := 'あさま';
    Ints[4, 5]  := 1997;
  end;
end;

では実行してみましょう。

http://m5s.jp/htn/86p/AdvGrid3.png

Ints プロパティはセルの整数値を読み書きします。実数値を保持する Floats プロパティもあります。上記のコードを書いた後で Cells[4, 5] を参照すると、string としての '1997' が得られます。

さて、開業年の列は右寄せに、固定セルは上下左右とも中央寄せにしたいところです。セル内の配置は OnGetAlignment イベントで指定します。

procedure TForm1.GridGetAlignment(Sender: TObject; ARow, ACol: Integer;
  var HAlign: TAlignment; var VAlign: TVAlignment);
begin
  if (ARow = 0) or (ACol = 0) then
  begin
    HAlign := taCenter;
    VAlign := vtaCenter;
    Exit;
  end;

  if ACol = 4 then
  begin
    HAlign := taRightJustify;
  end;
end;

HAlign (水平方向の配置)には taCentertaLeftJustifytaRightJustify のいずれかを指定します。また、VAlign (垂直方向の配置)には vtaTopvtaCentervtaBottom のいずれかを指定することができます。

ところが、これを実行しても固定セルの文字は上辺に張りついたままです。

http://m5s.jp/htn/86p/AdvGrid4.png

実は、垂直方向の配置は WordWrap プロパティが False のときだけ有効になります。さりとて WordWrap := False としてしまうと、列車名が最初の行しか表示されなくなります。このような場合は、セルごとに WordWrap の値を指定しましょう。FormCreate 手続きを次のようにしてください。

procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  with Grid do
  begin
    for i := 0 to ColCount - 1 do
    begin
      WordWraps[i, 0] := False;
    end;
    for i := 0 to RowCount - 1 do
    begin
      WordWraps[0, i] := False;
    end;

    Cells[1, 1] := '東京';
      :
      :
  end;
end;

今度は期待どおりの出力になりました。

http://m5s.jp/htn/86p/AdvGrid5.png