2015-03-19 2 views
0

Я использую Delphi XE5 со стилем.Delphi Style issue 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. 

Это мой первый раз играл с крючками Style, так что если вы можете увидеть лучший способ сделать это, пожалуйста, дайте мне знать

Смежные вопросы