我正在做一个保存订单和打印发票的应用程序。我的表单上有一些标签、tedits、tmemo、按钮、数据源、adotable、弹出菜单和dbgrid。
当我构建程序并向下滚动dbgrid滚动条时,它会在我释放鼠标按钮后滚动。但我想要连续滚动。
问候
发布于 2011-08-03 05:48:21
这就是拇指跟踪。派生一个新类以重写滚动行为。使用interposer类的示例:
type
TDBGrid = class(DBGrids.TDBGrid)
private
procedure WmVScroll(var Message: TWMVScroll); message WM_VSCROLL;
end;
TForm1 = class(TForm)
DBGrid1: TDBGrid;
..
implementation
procedure TDBGrid.WmVScroll(var Message: TWMVScroll);
begin
if Message.ScrollCode = SB_THUMBTRACK then
Message.ScrollCode := SB_THUMBPOSITION;
inherited;
end;如果不想派生新类,也可以替换控件的WindowProc。您所需要做的就是处理WM_VSCROLL消息。Here就是一个这样做的例子。
发布于 2015-08-26 18:16:51
下面是Sertac Akyuz提到的另一个解决方案,它不需要从TDBGrid派生新的类:
private
FOrgDBGridWndProc: TWndMethod;
procedure DBGridWndProc(var Msg: TMessage);
// ...
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FOrgDBGridWndProc:= DBGrid1.WindowProc;
DBGrid1.WindowProc := DBGridWndProc;
end;
procedure TForm1.DBGridWndProc(var Msg: TMessage);
begin
if (Msg.Msg = WM_VSCROLL) and
(LongRec(Msg.wParam).Lo = SB_THUMBTRACK) then
begin
LongRec(Msg.wParam).Lo := SB_THUMBPOSITION;
end;
if Assigned(FOrgDBGridWndProc) then
FOrgDBGridWndProc(Msg);
end;https://stackoverflow.com/questions/6918923
复制相似问题