Нет, не работает.
Код:
procedure TBaseGrid.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
- Нужен, фокуса действительно небыло. А вот VK_DOWN не работает, VK_SPACE, VK_RETURN работает, а стрелка вниз нет.
Код:
procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = VK_DOWN then ShowMessage('Попал');
end;
Попробовал со стандарным компонентом - все отлично.
Возможно это важно: TBaseGrid описан в другом юните.
Выяснилось: VK_DOWN, VK_RIGHT (т.е. клавиши со стрелками) переводят фокус между элементами.
Нашел вот такую штуку
Код:
Procedure tMessages ( Var Msg : tMsg; Var Handled : Boolean );
Begin
If ( Msg.Message = WM_KeyDown ) And
( Msg.wParam In [VK_UP, VK_DOWN, VK_LEFT, VK_RIGHT] ) Then
Begin
Case Msg.wParam Of
VK_UP : ShowMessage ( 'Нажата стрелка вверх' );
VK_DOWN : ShowMessage ( 'Нажата стрелка вниз' );
VK_LEFT : ShowMessage ( 'Нажата стрелка влево' );
VK_RIGHT : ShowMessage ( 'Нажата стрелка вправо' );
End;
Handled := True;
End;
End;
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnMessage := HandleMessages;
end;
но как это прикрутить к собственному классу описанному в отдельном юните
я даже не уверен, что это то что нужно