|
15番会議室「FAQ編纂委員会」に寄せられた「よくある質問の答え」
[Q]
StringGrid で,Grid の中に表示されている文字列を,途中で改行させると
いうことはできるのでしょうか?
[A]
自分すべての描画コードを書いて表示させる必要があります。
以下にその手順を示します。
(1)コンポーネントの配置
> type
> TForm1 = class(TForm)
> StringGrid1: TStringGrid;
> Panel1: TPanel;
> Button1: TButton;
> {以下省略}
> end;
という形でコンポーネントを置きます。
(2)プロパティの設定(描画を自分でやるように設定)StringGrid1 の
DefaultDrawing プロパティを FALSE に設定します。
(3)描画部分を記述StringGrid1 のイベントの中の OnDrawCell を使って以下の
ように記述します。
> procedure TForm1.StringGrid1DrawCell(Sender: TObject; Col, Row: Longint;
> Rect: TRect; State: TGridDrawState);
> begin
> with StringGrid1.Canvas do
> begin
> Font := StringGrid1.Font;
> if gdFixed in State then
> begin
> Brush.Color := StringGrid1.FixedColor;
> Font.Color := clBtnText;
> end;
> FillRect(Rect);
> TextRect(Rect, Rect.Left + 2, Rect.Top + 2,
> StringGrid1.Cells[Col, Row]);
> if (gdFixed in State) and StringGrid1.Ctl3D then
> begin
> Pen.Color := clBtnHighlight;
> Polyline([Point(Rect.Left, Rect.Bottom - 1), Rect.TopLeft,
> Point(Rect.Right, Rect.Top)]);
> end;
> if gdFocused in State then
> DrawFocusRect(Rect);
> end;
> end;
(4)いよいよ複数行表示です。(3)のなかで
> TextRect(Rect, Rect.Left + 2, Rect.Top + 2,
> StringGrid1.Cells[Col, Row]);
という部分で文字列を描画していましたが、これを
> StrPCopy(s, StringGrid1.Cells[Col, Row]);
> DrawText(StringGrid1.Canvas.Handle, s, -1, Rect, DT_WORDBREAK);
とします.
ここで必要となる変数宣言は以下の通りです。
> var
> s: array [0..255] of Char;
DrawText 関数 RECT は指定された長方形の中にテキストを描画します。
これは、自動的に複数行表示してくれるので便利です。
StrPCopy は Pascal 形式の文字列を Windows API 用に変換する関数です。
詳しくはそれぞれのヘルプを見て下さい。
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum FDELPHIに寄せられる質問の中から、よくある質問への回答を FDELPHIのメンバーがまとめたものです。 したがって、これらの回答はボーランド株式会社がサポートする公式のものではなく、掲示されている内容についての問い合わせは受けられない場合があります。
Copyright 1996-1998 Delphi Users' ForumFAQ編纂委員会
|