Проблема стиля Delphi. Вертикальная прокрутка TDBGrid прерывистая при прокрутке.

Я использую Delphi XE5 с примененным стилем.

При использовании DBGrid с достаточным количеством записей для отображения вертикальной полосы прокрутки щелчок и перетаскивание полосы прокрутки приводит к прерывистой анимации. Сетка продолжает перерисовываться/обновляться.

Если я устанавливаю для DBGRID.StyleElement.seBorder значение False, он ведет себя нормально, например. вы можете перетаскивать полосу прокрутки вверх или вниз без изменения/перекрашивания сетки до тех пор, пока вы не отпустите кнопку мыши.

Есть ли способ заставить вертикальную полосу прокрутки вести себя при включенных стилях?


person Dangas56    schedule 19.03.2015    source источник


Ответы (1)


Это то, что я сделал, чтобы стилизованная сетка вел себя как не стилизованная сетка при прокрутке.

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, поэтому, если вы можете найти лучший способ сделать это, пожалуйста, дайте мне знать.

person Dangas56    schedule 20.03.2015