簡體   English   中英

Delphi dbgrid連續滾動

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM