[英]Delphi dbgrid continuous scrolling
我正在制作一個包含訂單和打印發票的應用程序。 我的表單上有一些標簽,tedits,tmemos,按鈕,數據源,adotable,popupmenu和dbgrid。
當我構建程序並向下滾動dbgrid滾動條時,它會在我釋放鼠標按鈕后滾動。 但我想要連續滾動。
問候
這就是所謂的拇指追蹤。 派生一個新類來覆蓋滾動行為。 使用插入器類的示例:
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
消息。 這是一個如何做到這一點的例子。
這是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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.