|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
class(TCustomControl) не работает KeyDown
Собсвенно сабж
Код:
type TBaseGrid = class(TCustomControl) .......... protected procedure Paint; override; procedure Click; override; procedure KeyDown(var Key: Word; Shift: TShiftState); override; ........... end; procedure TBaseGrid.KeyDown(var Key: Word; Shift: TShiftState); begin inherited KeyDown(Key, Shift); if Key = VK_RETURN then ShowMessage('Попал'); {case Key of VK_: SetEdt(Edt.EdtRow,Edt.EdtCol+1); VK_RIGHT: SetEdt(Edt.EdtRow,Edt.EdtCol+1); end; } end; полагаю нужна еще иформация, но незнаю какая, не выкладывать же весь проект |
#2
|
||||
|
||||
Цитата:
Код:
type TBaseGrid = class(TCustomControl) ..... protected procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; ..... end; ..... procedure TBaseGrid.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin inherited; if CanFocus then SetFocus; end; |
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
Помидоркин (08.04.2014)
|
#3
|
||||
|
||||
Цитата:
|
#4
|
||||
|
||||
Нет, не работает.
Код:
procedure TBaseGrid.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); Код:
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; я даже не уверен, что это то что нужно Последний раз редактировалось Помидоркин, 08.04.2014 в 19:08. |
#5
|
||||
|
||||
Цитата:
Чтобы этого не происходило нужно отлавливать сообщение WM_GETDLGCODE: Код:
type TBaseGrid = class(TCustomControl) ..... protected procedure WMGetDlgCode(var Msg: TWMGetDlgCode); message WM_GETDLGCODE; ..... end; ..... procedure TBaseGrid.WMGetDlgCode(var Msg: TWMGetDlgCode); begin Msg.Result := DLGC_WANTARROWS; end; |
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
Помидоркин (09.04.2014)
|
#6
|
||||
|
||||
Цитата:
|