Владимир писал(а):тем не менее все OnKeyPress и OnKeyDown в TEdit отрабатываются!
Этого не может быть, т.к. TEdit (в данном случае) сам тоже не видим и в нем производить ввод нет возможности.
Владимир писал(а): Может я испорчен временем, но установка свойства формы KeyPreviiew=True
должна включать обработку нажатия клавиш на пустой форме и забывать о невидимых TEdit?
KeyPreview позволяет обрабатывать события
OnKeyPress, OnKeyDown, OnKeyUp сначала как событие формы, а потом (если описан обработчик) как событие компонента, в котором оно наступило.
Вот элементарный код, который поможет разобраться:
- Код: Выделить всё
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: char);
begin
ShowMessage('FromEdit: ' + Key);
end;
procedure TForm1.FormKeyPress(Sender: TObject; var Key: char);
begin
ShowMessage('FromForm: ' + Key);
end;
procedure TForm1.ListBox1KeyPress(Sender: TObject; var Key: char);
begin
ShowMessage('FromListBox: ' + Key);
end;
На форме (Form1) расположен список (ListBox1) и редактор (Edit), в которых нажимаем кнопки. Обрати внимание на то, как обрабатываются простые ключи (типа 'T', '6', 'п' и т.п.) и командные (типа 'Enter', 'Esc' и т.п.) в ListBox1, а как в Edit1 - тут могут быть неоднозначности.
Если спрятать компонент, то будет обрабатываться только событие
TForm1.FormKeyPress.