![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Реакция на клавиатуру
AlexeyT © (2006-03-13 00:11:00)Пишу компонент, наследник TPanel. Как добавить реакцию на клавиши (Up/Down/Home/etc), какой метод для этого написать или перекрыть? В основной программе это FormKeyDown, а для компонента как сделать?
AlexeyT (2006-03-14 19:40:00) [1]
> AbrosimovA (14.03.06 08:54) [6]
> Используй WMKeyDown.
Наверное, буду использовать KeyDown, т.к. я сделал с WMKeyDown, и перестал работать обработчик OnKeyDown основйо формы. По скорости вроде одно и то же...
AbrosimovA (2006-03-14 08:54:00) [2]Используй WMKeyDown.
AbrosimovA (2006-03-14 08:38:00) [3]
> Есть ли разница: написать WMKeyDown или перекрыть TWinControl.
> KeyDown
Ты это можешь проверить поставив брекпойнты на WMKeyDown и KeyDown
и посмотреть, что раньше сработает.
AlexeyT (2006-03-14 00:32:00) [4]
> Юрий Зотов © (13.03.06 11:17) [2]
Тоже спасибо.
AlexeyT (2006-03-14 00:30:00) [5]>AbrosimovA (13.03.06 09:06) [1]
Спасибо.
Еще вопрос:
Есть ли разница: написать WMKeyDown или перекрыть TWinControl.KeyDown?Оба способа работают, есть ли разница по скорости отклика на клавиатуру?
А то что-то сейчас реакция на клавиатуру замедленная (сделал через KeyDown).
Юрий Зотов (2006-03-13 11:17:00) [6]Чтобы оконный контрол получал сообщения клавиатуры, он должен обработать WM_GETDLGCODE и вернуть системе нужный результат. Описание см. в справке WinAPI или в MSDN.
AbrosimovA (2006-03-13 09:06:00) [7]
TMyPanel = class(TPanel)
private
protected
procedure WMKeyUp(var Message: TWMKeyUp); message WM_KEYUP;
end;
var
Form1: TForm1;
Panel: TMyPanel;
implementation
{$R *.dfm}
procedure TMyPanel.WMKeyUp(var Message: TWMKeyUp);
begin
if Message.CharCode=VK_UP then ShowMessage('UP');
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Panel:=TMyPanel.Create(Self);
Panel.Parent:=Self;
Panel.Caption:='123';
end;
procedure TForm1.FormShow(Sender: TObject);
begin
FocusControl(Panel);
end;