掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
DBGridやStringGridのScrollBarをカスタマイズ (ID:33658)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
真琴:「ハルコさん、こうすれば TScrollBarとTDBGridのスクロールが同期するよネ、もちろん、事前にTScrollBarのMax,Minを TableのRecord数に合わせておくんだけど」 type TScrollBar = class(StdCtrls.TScrollBar) private procedure WmLButtonDown(var Msg: TMessage); Message WM_LBUTTONDOWN; end; TDBGrid = class(DBGrids.TDBGrid) private procedure WmVScroll(var Msg: TWMScroll); Message WM_VSCROLL; end; TForm1 = class(TForm) DBGrid1: TDBGrid; ScrollBar1: TScrollBar; ........ private procedure ScrollBar1Change(Sender: TObject); .............. end; ............... var ScrBarMDown: Boolean; procedure TForm1.ScrollBar1Change(Sender: TObject); begin PostMessage(DBGrid1.Handle, WM_VSCROLL, MakeWParam(SB_THUMBPOSITION, ScrollBar1.Position), 0); PostMessage(DBGrid1.Handle, WM_VSCROLL, MakeWParam(SB_ENDSCROLL, 0), 0); end; procedure TScrollBar.WmLButtonDown(var Msg: TMessage); begin ScrBarMDown := True; inherited; end; procedure TDBGrid.WmVScroll(var Msg: TWMScroll); function GetThumbVPos(wH: HWND): Integer; var SI: TScrollInfo; begin SI.cbSize := SizeOf(TScrollInfo); SI.fMask := SIF_POS; if GetScrollInfo(wH, SB_VERT, SI) then result := SI.nPos else result := -1; end; var Pos: Integer; begin inherited; case Msg.ScrollCode of SB_THUMBPOSITION, SB_THUMBTRACK: Pos := Msg.Pos; else Pos := GetThumbVPos(Form1.DBGrid1.Handle); end; case Msg.ScrollCode of SB_LINEUP, SB_LINEDOWN, SB_THUMBTRACK: ScrBarMDown := False; end; Form1.ScrollBar1.OnChange := nil; if ScrBarMDown then Form1.Table1.RecNo := Pos else Form1.ScrollBar1.Position := Pos; Form1.ScrollBar1.OnChange := Form1.ScrollBar1Change; end; 春子:「そうね、でも、DBGridのセルをクリックした場合は、これだけじゃダメよ」 真琴:「あっ、そっか、それを忘れてた^^; じゃぁ、これを追加すればイイかな?」 procedure TDBGrid.WmLButtonDown(var Msg: TMessage); begin inherited; // Cellをクリックした場合 Form1.ScrollBar1.OnChange := nil; Form1.ScrollBar1.Position := Form1.Table1.RecNo; Form1.ScrollBar1.OnChange := Form1.ScrollBar1Change; end; 春子:「うん、あとは、矢印キーでスクロールした場合よね」 真琴:「あ…それも忘れてた^^;; 完全にするのは手間がかかるよね、ハルコさん」 春子:「そういうコト、イイものには手間がかかってるの、だからお値段もそれなり」 真琴:「手間もエコ出来たらいいのにね、パソコンで電気使えばCO2も増えるんだから」 春子:「なら、コーディングを考えてる時はパソコンの電源切っておけばいいでしょ?」 真琴:「でも、考える度にイチイチそれをするのも面倒、それに、実行して試しながら手直しをしたいし」 春子:「まぁね、今はまだそこまでエコに徹しなくても大丈夫だと思うけど…」 真琴:「未来には、どうなるのかなぁ…」 春子:「それを知りたければ、行って見てきたら? マコト、出来るんだから」 真琴:「ハルコさん、そういう冗談もエコしたいよネ」 春子:「これは、ウルオイってものよ、エコだけじゃぁツマラナイって」
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.