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

解決


tetsu  2005-03-01 04:31:06  No: 13442

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


にしの  2005-03-01 05:46:24  No: 13443

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


久慈  2005-03-01 05:50:11  No: 13444

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


tetsu  2005-03-01 07:27:52  No: 13445

早いレスありがとうございます。
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

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


tetsu  2005-03-02 05:21:58  No: 13447

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

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


Basser  2005-03-03 02:23:50  No: 13448

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

>便乗してもう一つ、同じ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

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

普通に 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

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

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


tetsu  2005-03-03 07:04:28  No: 13451

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加