2015-03-19 30 views
0

我使用Delphi XE5風格應用。德爾福風格的問題TDBGrid垂直滾動時滾動波濤洶涌

當使用具有足夠記錄的DBGrid來顯示垂直滾動條時,單擊並拖動滾動條會導致波濤洶涌的動畫。網格不斷重新繪製/更新。

如果我將DBGRID.StyleElement.seBorder設置爲False,則表現正常,例如,您可以將滾動條拖動到頂部或底部,而不必更改/重新繪製網格,直到您按下鼠標按鈕。

當樣式打開時,是否有任何方法使垂直滾動條工作?

回答

0

這是我做過的使滾動時使樣式化網格的行爲與非樣式網格類似。

unit xStyleFixes; 

interface 
uses forms, Vcl.Buttons, Vcl.StdCtrls, Windows, Messages, SysUtils, Classes, Graphics, Controls, themes, Wwdbgrid, typinfo, DBGrids; 

type 
    TFixScrollingStyleHook = class (TScrollingStyleHook) 
    var ScrollBarthumbBtnWasPressed : Boolean; 
    procedure WMVScroll(var Msg: TMessage); message WM_VSCROLL; 
end; 

implementation 

procedure TFixScrollingStyleHook.WMVScroll(var Msg: TMessage); 
var sTest : String; 
begin 
    if VertSliderState = tsThumbBtnVertPressed then begin 
    ScrollBarthumbBtnWasPressed := true; 
    Handled := True; 
    end else begin 
    if ScrollBarthumbBtnWasPressed then begin 
     if Self.VertTrackRect.TopLeft = self.VertSliderRect.TopLeft then 
     TWMVScroll(Msg).ScrollCode := SB_TOP; 
     if Self.VertTrackRect.BottomRight = self.VertSliderRect.BottomRight then 
     TWMVScroll(Msg).ScrollCode := SB_BOTTOM; 
     ScrollBarthumbBtnWasPressed := False; 
    end; 
    CallDefaultProc(TMessage(Msg)); 
    PaintScroll; 
    end; 
end; 

initialization 
    TCustomStyleEngine.RegisterStyleHook(TWWDbGrid, TFixScrollingStyleHook); 
    TCustomStyleEngine.RegisterStyleHook(TDbGrid, TFixScrollingStyleHook); 
end. 

這是我第一次與風格鉤打,所以如果你能看到一個更好的方式來做到這一點,請讓我知道

相關問題