StringGridのスクロールバーのページサイズを変更するには

解決


ゆゆ  2005-10-27 01:17:33  No: 18292  IP: 192.*.*.*

StringGridのスクロールバーを、他のコンポーネントのスクロールバーの様に
全体の行数に応じて大きさが変わるようにできないでしょうか?

例えば、RowCountが100行のときに表示されている行数が20行の場合に20%の
サイズになる様にしたいのですが。

編集 削除
えーと  2005-10-27 02:19:34  No: 18293  IP: 192.*.*.*

こことか

http://www2.big.or.jp/~osamu/Delphi/delphi-browse.cgi?index=065498

めんどくさそうですね。

編集 削除
マージ・ジルマ・マジ・ジンガ  2005-10-27 03:46:43  No: 18294  IP: 192.*.*.*

こんなのでどうでしょう?
フォームにStringGrid1とTutton1を配置し、Button1のクリックイベントを
下記の様に記述。

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    initMax:integer;
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
  SI: TScrollInfo;
begin
  SI.cbSize := SizeOf(TScrollInfo);
  SI.fMask := SIF_RANGE or SIF_PAGE;
  GetScrollInfo(StringGrid1.Handle,SB_VERT,SI);

  SI.nPage := StringGrid1.VisibleRowCount;
  SI.nMin  := 0;
  SI.nMax  := StringGrid1.RowCount + StringGrid1.VisibleRowCount;

  SetScrollInfo(StringGrid1.Handle,SB_VERT,SI,true);
end;

編集 削除
ゆゆ  2005-10-28 00:13:56  No: 18295  IP: 192.*.*.*

マージ・ジルマ・マジ・ジンガさん、ありがとうございます。
このプログラムのままだと、一番下までスクロールできないので、

  SI.nMin := 0 の部分を

  SI.nMin := StringGrid1.FixedRows と変更すると

うまく動きました。

ただ、RowCountの値を変更してしまうと変な動きになってしまいます。
他にもいろいろなタイミングでスクロールバーの設定が変になってしまいます。

どなたかいい方法をご存じないでしょうか?

編集 削除
通りすがり  2005-10-28 00:22:55  No: 18296  IP: 192.*.*.*

>うまく動きました。

>ただ、RowCountの値を変更してしまうと変な動きになってしまいます。

うまく動いてないじゃん!

編集 削除
えーと  2005-10-28 00:34:38  No: 18297  IP: 192.*.*.*

なんで無視されるかなぁ・・・ちゃんと動くのに

編集 削除
通りすがり  2005-10-28 01:42:49  No: 18298  IP: 192.*.*.*

>なんで無視されるかなぁ・・・ちゃんと動くのに
意味がわからない・・・

編集 削除
ゆゆ  2005-10-28 01:51:47  No: 18299  IP: 192.*.*.*

>なんで無視されるかなぁ・・・ちゃんと動くのに
無視しているわけじゃないんですよ。情報ありがとうございます。

ただ、初心者なもんで内容が理解できずに途方に暮れていたところで
マージ・ジルマ・マジ・ジンガさんがサンプルソースをつけてくれたもの
ですから、そちらを頼りに進めていました。

お礼が遅れてごめんなさい。

編集 削除
Delphi初心者  2005-10-28 10:08:41  No: 18300  IP: 192.*.*.*

Delphian Worldにそんなコンポーネントありますよ。
http://www6.airnet.ne.jp/~sone_san/delphi/

編集 削除
ゆゆ  2005-10-31 14:33:04  No: 18301  IP: 192.*.*.*

ありがとうございます。さっそく使いました。うまく動いています。
ソースを見たけどかなり大変なことをやっているみたいですね。

編集 削除