Следующий пример перхватывает сообщения скроллирования в компоненте TScrollBox, тем самым синхронизируя два скролбара. Если один из скролбаров изменяет своё положение, то значение второго скролбара изменяется на такую же величину. Сообщения скролирования перехватываются путём сабклассинга оконной процедуры (WinProc) у скролбара.

 

Как сделать плавную прокрутку?

 

Решить задачу помогут обработчики событий OnScroll (в данном примере два компонента ScrollBox (ScrollBar1 и ScrollBar2) расположены на форме TMainForm):

 

Code:

procedure TMainForm.ScrollBar1Scroll(Sender: TObject;

ScrollCode: TScrollCode; var ScrollPos: Integer);

begin

ScrollBar2.Position:=ScrollPos;

end;

 

procedure TMainForm.ScrollBar2Scroll(Sender: TObject;

ScrollCode: TScrollCode; var ScrollPos: Integer);

begin

ScrollBar1.Position := ScrollPos;

end;

 

Нужные нам свойства существуют, но вынесены в секцию Protected предка DBGrid: TCustomGrid. Наиболее правильным способом было бы создание класса наследника от TDBGrid с выводом ScrollBars в секцию Public, но можно обойтись и без этого следующим способом:

Code:

 

Type TFake=class(TCustomGrid);

 

implementation

 

{$R *.dfm}

 

procedure TForm1.Button1Click(Sender: TObject);

begin

TFake(DBGrid1).ScrollBars:=ssVertical;

end;

 

Антон Григорьев

В Windows предусмотрено сообщение WM_CtlColorScrollBar, которое посылается окну, содержащему элементы управления ScrollBar (полосы прокрутки). В ответ на это сообщение окно должно вернуть системе кисть, которой надо закрасить полосу прокрутки. С помощью WM_CtlColorScrollBar можно получать разноцветные полосы прокрутки, что иногда бывает достаточно красиво.

Установите свойтсво ScrollBar.TabStop в False.