Delphi 样式问题 TDBGrid 垂直滚动滚动时断断续续
Delphi Style issue TDBGrid Vertical Scroll choppy when scrolling
我正在使用应用了样式的 Delphi XE5。
当使用具有足够记录以显示垂直滚动条的 DBGrid 时,单击并拖动滚动条会导致动画断断续续。网格保持repainting/updating.
如果我将 DBGRID.StyleElement.seBorder 设置为 False,它会正常运行,例如您可以将滚动条拖动到顶部或底部而不用它 changing/repainting 直到您松开鼠标按钮为止。
有什么方法可以使垂直滚动条在样式打开时正常运行吗?
这就是我为使样式化网格在滚动时表现得像非样式化网格所做的工作。
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.
这是我第一次使用 Style hooks,所以如果你能找到更好的方法,请告诉我
我正在使用应用了样式的 Delphi XE5。
当使用具有足够记录以显示垂直滚动条的 DBGrid 时,单击并拖动滚动条会导致动画断断续续。网格保持repainting/updating.
如果我将 DBGRID.StyleElement.seBorder 设置为 False,它会正常运行,例如您可以将滚动条拖动到顶部或底部而不用它 changing/repainting 直到您松开鼠标按钮为止。
有什么方法可以使垂直滚动条在样式打开时正常运行吗?
这就是我为使样式化网格在滚动时表现得像非样式化网格所做的工作。
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.
这是我第一次使用 Style hooks,所以如果你能找到更好的方法,请告诉我