Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Реакция на клавиатуру


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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо