AdvStringGrid ことはじめ
前回紹介した AdvStringGrid を実際に使ってみましょう。
インストールは Setup.exe 実行で一発、難しくはありません。
Delphi を起動し、新規アプリケーションを作成します。フォームに TAdvStringGrid をひとつ配置します(TMS Grids タブにあります)。コンポーネント名が「AdvStringGrid1
」と長ったらしいので、Name プロパティを「Grid
」にしておきます。
続いて、オブジェクトインスペクタでプロパティを以下のように変更します。
プロパティ名 | 値 |
---|---|
ColumnHeader |
|
DefaultColWidth |
80 |
DefaultRowHeight |
45 |
EnableHtml |
False |
FixedFont |
フォントを「MS ゴシック」に、文字セットを「日本語」に |
Font |
フォントを「MS ゴシック」に、文字セットを「日本語」に |
RowCount |
6 |
RowHeader |
|
ColumnHeader
と RowHeader
の最初の行は空行です。ここまでの作業を行うと、フォーム上のグリッドが下の図のようになっているはずです(グリッドやフォームの大きさは適当に調整)。
次に、フォームの 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;
では実行してみましょう。
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
(水平方向の配置)には taCenter
、taLeftJustify
、taRightJustify
のいずれかを指定します。また、VAlign
(垂直方向の配置)には vtaTop
、vtaCenter
、vtaBottom
のいずれかを指定することができます。
ところが、これを実行しても固定セルの文字は上辺に張りついたままです。
実は、垂直方向の配置は 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;
今度は期待どおりの出力になりました。