しようと思って挫折。
そこでTScrollBarをカスタマイズして各種コンポーネントと同期させようと
試行錯誤したのですが挫折間近。
さしあたってはDBGridのスクロールバーとの同期をはかりたいのですが、
お知恵を拝借できないでしょうか?
真琴:「ハルコさん、こうすれば 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も増えるんだから」
春子:「なら、コーディングを考えてる時はパソコンの電源切っておけばいいでしょ?」
真琴:「でも、考える度にイチイチそれをするのも面倒、それに、実行して試しながら手直しをしたいし」
春子:「まぁね、今はまだそこまでエコに徹しなくても大丈夫だと思うけど…」
真琴:「未来には、どうなるのかなぁ…」
春子:「それを知りたければ、行って見てきたら? マコト、出来るんだから」
真琴:「ハルコさん、そういう冗談もエコしたいよネ」
春子:「これは、ウルオイってものよ、エコだけじゃぁツマラナイって」
ツイート | ![]() |