StringGridにおいて、カラムの幅をプログラムで変更するのはどうすればいいのでしょう?
stringgrid1.cells[0,*]はグリッドコンポーネントの幅の1/5にして、stringgrid1.cells[1,*]は2/5にして。。という風にプログラムで変更できるようにしたいです。
また、フォームのサイズを変更しても、グリッドコンポーネントに対するカラムの幅の割合を保つようにするにはどのように記述したらいいのですか??
分りにくい質問ですみません。おねがいします!
ColWidthsプロパティで変更します。
FormのOnResizeイベントで、再計算させれば割合を保てます。
もう1つ参考URL。
http://www2.big.or.jp/~osamu/Delphi/tips.cgi?index=0262
StringGrid1のカラムの幅を変えるには、
StringGrid1.ColWidths[0] := ○○; //カラム1の幅
StringGrid1.ColWidths[1] := ○○; //カラム2の幅
でいいのでは。
早いレスありがとうございます。
StringGrid1.ColWidths[0] :=
StringGrid1.Width div 2;
StringGrid1.ColWidths[1] :=
StringGrid1.Width div 2;
と書いたところ、グリッドの下のところにスクロールバーができます。これは消せないのでしょうか?オプションのscrollbarsのところをssNoneにすると、フォームを全画面表示にしてマウスをカチカチやると余白の部分がはいってしまいます。。
また、カラムの境界線をダブルクリックして、幅を文字幅にあわせるのはどうやれば出来るのでしょうか。
グリッドの線の幅も考慮に入れましょう。
そうですね。。忘れてました。
>カラムの境界線をダブルクリックして、幅を文字幅にあわせるのはどうやれば出来るのでしょうか。
の方法も教えてほしいのですが。。
便乗してもう一つ、同じStringGridについてなんですが、あるセルをダブルクリックすると、その行全ての情報を取得したいのですが、どのイベントのところにどのように記述したらいいのでしょうか?
>>カラムの境界線をダブルクリックして、幅を文字幅にあわせるのはどうやれば出来るのでしょうか。
>の方法も教えてほしいのですが。。
>便乗してもう一つ、同じ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;
> あるセルをダブルクリックすると、その行全ての情報を取得したいのですが
普通に 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;
>普通に Col と Row プロパティーが使えます。
そうですね。セルのダブルクリックだけならそれで充分だと思うのですが、
結構面倒なので例を挙げていませんが、境界線のダブルクリックに関しては、
カーソル座標が必要なのでヒントになればということです。
ありがとうございます。
なんとか出来ました。みなさん、本当に感謝してます!
ツイート | ![]() |