unit ScrollControl; interface uses Windows, Messages, SysUtils, Controls; function GetThumbPosV(WC:TWinControl):integer; function GetThumbPosH(WC:TWinControl):integer; function GetThumbSizeV(WC:TWinControl):integer; function GetThumbSizeH(WC:TWinControl):integer; function GetRangeMinV(WC:TWinControl):integer; function GetRangeMaxV(WC:TWinControl):integer; function GetRangeMinH(WC:TWinControl):integer; function GetRangeMaxH(WC:TWinControl):integer; procedure ScrollBottom(WC:TWinControl); procedure ScrollTop(WC:TWinControl); procedure ScrollRight(WC:TWinControl); procedure ScrollLeft(WC:TWinControl); procedure ScrollLineDown(WC:TWinControl); procedure ScrollLineUp(WC:TWinControl); procedure ScrollLineRight(WC:TWinControl); procedure ScrollLineLeft(WC:TWinControl); procedure ScrollPageDown(WC:TWinControl); procedure ScrollPageUp(WC:TWinControl); procedure ScrollPageRight(WC:TWinControl); procedure ScrollpageLeft(WC:TWinControl); procedure ScrollVPos(WC:TWinControl;Pos:integer); procedure ScrollHPos(WC:TWinControl;Pos:integer); function IsVScrollShown(WC:TWinControl):Boolean; function IsHScrollShown(WC:TWinControl):Boolean; implementation function GetThumbPosV(WC:TWinControl):integer; var SI:TScrollInfo; begin SI.cbSize := SizeOf(TScrollInfo); SI.fMask := SIF_POS; if GetScrollInfo(WC.Handle,SB_VERT,SI) then result := SI.nPos else result := -1; end; function GetThumbPosH(WC:TWinControl):integer; var SI:TScrollInfo; begin SI.cbSize := SizeOf(TScrollInfo); SI.fMask := SIF_POS; if GetScrollInfo(WC.Handle,SB_HORZ,SI) then result := SI.nPos else result := -1; end; function GetThumbSizeV(WC:TWinControl):integer; var SI:TScrollInfo; begin SI.cbSize := SizeOf(TScrollInfo); SI.fMask := SIF_PAGE; if GetScrollInfo(WC.Handle,SB_VERT,SI) then result := SI.nPage else result := -1; end; function GetThumbSizeH(WC:TWinControl):integer; var SI:TScrollInfo; begin SI.cbSize := SizeOf(TScrollInfo); SI.fMask := SIF_PAGE; if GetScrollInfo(WC.Handle,SB_HORZ,SI) then result := SI.nPage else result := -1; end; function GetRangeMinV(WC:TWinControl):integer; var SI:TScrollInfo; begin SI.cbSize := SizeOf(TScrollInfo); SI.fMask := SIF_RANGE; if GetScrollInfo(WC.Handle,SB_VERT,SI) then result := SI.nMin else result := -1; end; function GetRangeMaxV(WC:TWinControl):integer; var SI:TScrollInfo; begin SI.cbSize := SizeOf(TScrollInfo); SI.fMask := SIF_RANGE; if GetScrollInfo(WC.Handle,SB_VERT,SI) then result := SI.nMax else result := -1; end; function GetRangeMinH(WC:TWinControl):integer; var SI:TScrollInfo; begin SI.cbSize := SizeOf(TScrollInfo); SI.fMask := SIF_RANGE; if GetScrollInfo(WC.Handle,SB_HORZ,SI) then result := SI.nMin else result := -1; end; function GetRangeMaxH(WC:TWinControl):integer; var SI:TScrollInfo; begin SI.cbSize := SizeOf(TScrollInfo); SI.fMask := SIF_RANGE; if GetScrollInfo(WC.Handle,SB_HORZ,SI) then result := SI.nMax else result := -1; end; procedure ScrollBottom(WC:TWinControl); begin WC.Perform(WM_VSCROLL,MakeWParam(SB_BOTTOM,0),0); WC.Perform(WM_VSCROLL,MakeWParam(SB_ENDSCROLL,0),0); end; procedure ScrollTop(WC:TWinControl); begin WC.Perform(WM_VSCROLL,MakeWParam(SB_TOP,0),0); WC.Perform(WM_VSCROLL,MakeWParam(SB_ENDSCROLL,0),0); end; procedure ScrollRight(WC:TWinControl); begin WC.Perform(WM_HSCROLL,MakeWParam(SB_RIGHT,0),0); WC.Perform(WM_HSCROLL,MakeWParam(SB_ENDSCROLL,0),0); end; procedure ScrollLeft(WC:TWinControl); begin WC.Perform(WM_HSCROLL,MakeWParam(SB_LEFT,0),0); WC.Perform(WM_HSCROLL,MakeWParam(SB_ENDSCROLL,0),0); end; procedure ScrollLineDown(WC:TWinControl); begin WC.Perform(WM_VSCROLL,MakeWParam(SB_LINEDOWN,0),0); WC.Perform(WM_VSCROLL,MakeWParam(SB_ENDSCROLL,0),0); end; procedure ScrollLineUp(WC:TWinControl); begin WC.Perform(WM_VSCROLL,MakeWParam(SB_LINEUP,0),0); WC.Perform(WM_VSCROLL,MakeWParam(SB_ENDSCROLL,0),0); end; procedure ScrollLineRight(WC:TWinControl); begin WC.Perform(WM_HSCROLL,MakeWParam(SB_LINERIGHT,0),0); WC.Perform(WM_HSCROLL,MakeWParam(SB_ENDSCROLL,0),0); end; procedure ScrollLineLeft(WC:TWinControl); begin WC.Perform(WM_HSCROLL,MakeWParam(SB_LINELEFT,0),0); WC.Perform(WM_HSCROLL,MakeWParam(SB_ENDSCROLL,0),0); end; procedure ScrollPageDown(WC:TWinControl); begin WC.Perform(WM_VSCROLL,MakeWParam(SB_PAGEDOWN,0),0); WC.Perform(WM_VSCROLL,MakeWParam(SB_ENDSCROLL,0),0); end; procedure ScrollPageUp(WC:TWinControl); begin WC.Perform(WM_VSCROLL,MakeWParam(SB_PAGEUP,0),0); WC.Perform(WM_VSCROLL,MakeWParam(SB_ENDSCROLL,0),0); end; procedure ScrollPageRight(WC:TWinControl); begin WC.Perform(WM_HSCROLL,MakeWParam(SB_PAGERIGHT,0),0); WC.Perform(WM_HSCROLL,MakeWParam(SB_ENDSCROLL,0),0); end; procedure ScrollPageLeft(WC:TWinControl); begin WC.Perform(WM_HSCROLL,MakeWParam(SB_PAGELEFT,0),0); WC.Perform(WM_HSCROLL,MakeWParam(SB_ENDSCROLL,0),0); end; procedure ScrollVPos(WC:TWinControl;Pos:integer); begin WC.Perform(WM_VSCROLL,MakeWParam(SB_THUMBPOSITION,Pos),0); WC.Perform(WM_VSCROLL,MakeWParam(SB_ENDSCROLL,0),0); end; procedure ScrollHPos(WC:TWinControl;Pos:integer); begin WC.Perform(WM_HSCROLL,MakeWParam(SB_THUMBPOSITION,Pos),0); WC.Perform(WM_HSCROLL,MakeWParam(SB_ENDSCROLL,0),0); end; function IsVScrollShown(WC:TWinControl):Boolean; begin result := (WC.Width-WC.ClientWidth) >= GetSystemMetrics(SM_CXVSCROLL); end; function IsHScrollShown(WC:TWinControl):Boolean; begin result := (WC.Height-WC.ClientHeight) >= GetSystemMetrics(SM_CYHSCROLL); end; end.