{==================================================================}
procedure TForm1.FormActivate(Sender: TObject);
begin
{ Делаем ссылку на нового обработчика сообщений }
Application.OnMessage := ProcessFormMessages;
end;
procedure tForm1.ProcessFormMessages ( var Msg : tMsg; var Handled : Boolean );
Var
Increment : Byte;
TheControl : tWinControl;
begin
{ проверка наличия системного сообщения KeyDown }
Case Msg.Message Of
WM_KEYDOWN : If Msg.wParam In [VK_UP,VK_DOWN,VK_LEFT,VK_RIGHT] Then
Begin
{ изменяем величину приращения взависимости
от состояния клавиши Shift }
If GetKeyState ( VK_SHIFT ) And $80 = 0 Then
Increment := 8
Else
Increment := 1;
{ Этот код перемещает управление на родительский
GroupBox, если один из его контейнерных элементов
получает фокус. Если вам необходимо управлять
элементами внутри контейнера, удалите блок IF и
измените в блоке CASE TheControl на ActiveControl }
If ( ActiveControl.Parent Is tGroupBox ) Then
TheControl := ActiveControl.Parent
Else
TheControl := ActiveControl;
Case Msg.wParam Of
VK_UP : TheControl.Top := TheControl.Top - Increment;
VK_DOWN : TheControl.Top := TheControl.Top + Increment;
VK_LEFT : TheControl.Left := TheControl.Left - Increment;
VK_RIGHT : TheControl.Left := TheControl.Left + Increment;
End;
{ сообщаем о том, что сообщение обработано }
Handled := True;
End;
End;
end;