お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"StringGridで文字の幅の最大値に合わせる"



みなさんこんにちは。FuKuです。
昨日投稿したと思ったのに投稿されてなかった。
yoneさんごめんなさいm(__)m



格納してある文字の幅にColWidthを合わせるという機能が
StringGridの機能でありそうなのにありません。(^_^;)
ちょっと作ってみました。

フォームにStringGridとボタンを一つづつ置いて下さい。
ボタンのOnClickイベントハンドラに以下のソースを書いて下さい。

-----------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
var
  X, Y: Integer;
  MaxWidth: Integer;
begin
  with StringGrid1 do
  begin
    //文字を適当に作る
    for Y := 0 to RowCount - 1 do
    begin
      for X := 0 to ColCount - 1 do
      begin
        Cells[X, Y] := IntToStr(X * X * X * Y * Y * Y);
      end;
    end;

    //文字の幅に合わせる部分

    // Canvas に StringGridのフォントの情報を代入してやる。
    // この二つのオブジェクトは異なる情報を持つ場合があるので・・・
    Canvas.Font := Font;

    for X := 0 to RowCount - 1 do
    begin
      MaxWidth := 0;
      for Y := 0 to ColCount - 1 do
      begin
        // CanvasのTextWidthメソッドを利用しています
        if MaxWidth < Canvas.TextWidth(Cells[X, Y]) then
          MaxWidth := Canvas.TextWidth(Cells[X, Y]);
      end;
      // StringGridは左側に隙間が必ずできるので
      // そのままフォントの幅を代入すると右側が切れるので
      // 適当な数値を加えてやる
      ColWidths[X] := MaxWidth + 5;
    end;
  end;
end;
-----------------------------------------------------------

-------
  98/01/03 (土)13:23:31
  FuKu  (SGV00305)


Original document by FuKu            氏 ID:(SGV00305)


ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum