Я консервативен в плане Delphi. Наша дружба остановилась на D7. Поэтому про хелперы я ничего сказать не могу.
Но по Вашему вопросу могу предложить
"Шаманский метод GEO". Если задача условно "разовая" и в рамках одного модуля, то вполне хорошее решение.
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;
type
TScrollBox = class(Forms.TScrollBox)
protected
procedure WMGetDlgCode(var Message: TWMGetDlgCode); message WM_GETDLGCODE;
procedure WMKeyDown(var Message: TWMKey); message WM_KEYDOWN;
end;
TForm1 = class(TForm)
ScrollBox1: TScrollBox;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TScrollBox }
procedure TScrollBox.WMGetDlgCode(var Message: TWMGetDlgCode);
begin
Message.Result := DLGC_WANTARROWS;
end;
procedure TScrollBox.WMKeyDown(var Message: TWMKey);
begin
case Message.CharCode of
VK_UP:
VertScrollBar.Position := VertScrollBar.Position - 10;
VK_DOWN:
VertScrollBar.Position := VertScrollBar.Position + 10;
end;
end;
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
ScrollBox1.VertScrollBar.Range := 1000;
end;
end.