StringGridのスクロールバーを、他のコンポーネントのスクロールバーの様に
全体の行数に応じて大きさが変わるようにできないでしょうか?
例えば、RowCountが100行のときに表示されている行数が20行の場合に20%の
サイズになる様にしたいのですが。
こことか
http://www2.big.or.jp/~osamu/Delphi/delphi-browse.cgi?index=065498
めんどくさそうですね。
こんなのでどうでしょう?
フォームに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;
マージ・ジルマ・マジ・ジンガさん、ありがとうございます。
このプログラムのままだと、一番下までスクロールできないので、
SI.nMin := 0 の部分を
SI.nMin := StringGrid1.FixedRows と変更すると
うまく動きました。
ただ、RowCountの値を変更してしまうと変な動きになってしまいます。
他にもいろいろなタイミングでスクロールバーの設定が変になってしまいます。
どなたかいい方法をご存じないでしょうか?
>うまく動きました。
>ただ、RowCountの値を変更してしまうと変な動きになってしまいます。
うまく動いてないじゃん!
なんで無視されるかなぁ・・・ちゃんと動くのに
>なんで無視されるかなぁ・・・ちゃんと動くのに
意味がわからない・・・
>なんで無視されるかなぁ・・・ちゃんと動くのに
無視しているわけじゃないんですよ。情報ありがとうございます。
ただ、初心者なもんで内容が理解できずに途方に暮れていたところで
マージ・ジルマ・マジ・ジンガさんがサンプルソースをつけてくれたもの
ですから、そちらを頼りに進めていました。
お礼が遅れてごめんなさい。
Delphian Worldにそんなコンポーネントありますよ。
http://www6.airnet.ne.jp/~sone_san/delphi/
ありがとうございます。さっそく使いました。うまく動いています。
ソースを見たけどかなり大変なことをやっているみたいですね。
ツイート | ![]() |