Нет, не работает.
Код:
1 | procedure TBaseGrid . MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer );
|
- Нужен, фокуса действительно небыло. А вот VK_DOWN не работает, VK_SPACE, VK_RETURN работает, а стрелка вниз нет.
Код:
1 2 3 4 5 | procedure TForm1 . Memo1KeyDown(Sender: TObject; var Key: Word ;
Shift: TShiftState);
begin
if Key = VK_DOWN then ShowMessage( 'Попал' );
end ;
|
Попробовал со стандарным компонентом - все отлично.
Возможно это важно: TBaseGrid описан в другом юните.
Выяснилось: VK_DOWN, VK_RIGHT (т.е. клавиши со стрелками) переводят фокус между элементами.
Нашел вот такую штуку
Код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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 ;
|
но как это прикрутить к собственному классу описанному в отдельном юните
я даже не уверен, что это то что нужно