StringGridのカラムの幅の指定について。

解決


tetsu  2005-03-01 04:31:06  No: 13442  IP: [192.*.*.*]

StringGridにおいて、カラムの幅をプログラムで変更するのはどうすればいいのでしょう?
stringgrid1.cells[0,*]はグリッドコンポーネントの幅の1/5にして、stringgrid1.cells[1,*]は2/5にして。。という風にプログラムで変更できるようにしたいです。
また、フォームのサイズを変更しても、グリッドコンポーネントに対するカラムの幅の割合を保つようにするにはどのように記述したらいいのですか??
分りにくい質問ですみません。おねがいします!

編集    削除
にしの  2005-03-01 05:46:24  No: 13443  IP: [192.*.*.*]

ColWidthsプロパティで変更します。
FormのOnResizeイベントで、再計算させれば割合を保てます。
もう1つ参考URL。
http://www2.big.or.jp/~osamu/Delphi/tips.cgi?index=0262

編集    削除
久慈  2005-03-01 05:50:11  No: 13444  IP: [192.*.*.*]

StringGrid1のカラムの幅を変えるには、
StringGrid1.ColWidths[0] := ○○; //カラム1の幅
StringGrid1.ColWidths[1] := ○○; //カラム2の幅
でいいのでは。

編集    削除
tetsu  2005-03-01 07:27:52  No: 13445  IP: [192.*.*.*]

早いレスありがとうございます。
StringGrid1.ColWidths[0] := 
StringGrid1.Width div 2;

StringGrid1.ColWidths[1] := 
StringGrid1.Width div 2;
と書いたところ、グリッドの下のところにスクロールバーができます。これは消せないのでしょうか?オプションのscrollbarsのところをssNoneにすると、フォームを全画面表示にしてマウスをカチカチやると余白の部分がはいってしまいます。。
また、カラムの境界線をダブルクリックして、幅を文字幅にあわせるのはどうやれば出来るのでしょうか。

編集    削除
HOta  2005-03-01 08:51:49  No: 13446  IP: [192.*.*.*]

グリッドの線の幅も考慮に入れましょう。

編集    削除
tetsu  2005-03-02 05:21:58  No: 13447  IP: [192.*.*.*]

そうですね。。忘れてました。
>カラムの境界線をダブルクリックして、幅を文字幅にあわせるのはどうやれば出来るのでしょうか。
の方法も教えてほしいのですが。。

便乗してもう一つ、同じStringGridについてなんですが、あるセルをダブルクリックすると、その行全ての情報を取得したいのですが、どのイベントのところにどのように記述したらいいのでしょうか?

編集    削除
Basser  2005-03-03 02:23:50  No: 13448  IP: [192.*.*.*]

>>カラムの境界線をダブルクリックして、幅を文字幅にあわせるのはどうやれば出来るのでしょうか。
>の方法も教えてほしいのですが。。

>便乗してもう一つ、同じStringGridについてなんですが、あるセルをダブルクリックすると、その行全ての情報を取得したいのですが、どのイベントのところにどのように記述したらいいのでしょうか?

どちらも OnDblClick でいいと思います。
後者はこんな感じでしょうか

  procedure TForm1.GridDblClick(Sender: TObject);
  var
    P: TPoint;
    X, Y: Integer;
  begin
    // カーソル位置の取得
    GetCursorPos(P);

    // スクリーン座標からグリッドのクライアント座標に変換
    P:= TStringGrid(Sender).ScreenToClient(P);

    // ダブルクリックされたセル番地の取得
    TStringGrid(Sender).MouseToCell(P.x, P.y, X, Y);

    // 2列目がダブルクリックされた場合はメッセージとして表示
    if (X = 1) then ShowMessage(TStringGrid(Sender).Rows[Y].Text);
  end;

編集    削除
りおりお  2005-03-03 02:40:59  No: 13449  IP: [192.*.*.*]

> あるセルをダブルクリックすると、その行全ての情報を取得したいのですが

普通に Col と Row プロパティーが使えます。

procedure TForm1.StringGrid1DblClick(Sender: TObject);
var
  i: integer;
begin
  Memo1.Clear;
  with StringGrid1 do
    for i := 0 to ColCount-1 do
      Memo1.Lines.Add(Cells[i,Row])
end;

編集    削除
Basser  2005-03-03 03:06:04  No: 13450  IP: [192.*.*.*]

>普通に Col と Row プロパティーが使えます。

そうですね。セルのダブルクリックだけならそれで充分だと思うのですが、
結構面倒なので例を挙げていませんが、境界線のダブルクリックに関しては、
カーソル座標が必要なのでヒントになればということです。

編集    削除
tetsu  2005-03-03 07:04:28  No: 13451  IP: [192.*.*.*]

ありがとうございます。
なんとか出来ました。みなさん、本当に感謝してます!

編集    削除