![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Переопределение клавиши TAB
lightix © (2004-07-21 09:04:00)Как можно для всего приложения переопределить, что для перехода между визуальными компонентами должна быть нажата клавиша Enter вместо TAB ?
C++ Builder 5.0
Dummes (2004-07-21 10:53:00) [1]Используйте приведенный код в обработчике события компонента Edit OnKeyPress.
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
If Key = #13 Then
Begin
SelectNext(Sender as tWinControl, True, True );
Key := #0;
end;
end;
Это заставляет клавишу Enter вести себя подобно клавише Tab. После этого выберите на форме все элементы управления (за исключением кнопок), у которых вы хотели бы видеть такую функциональность, и в Инспекторе Объектов сошлитесь в обработчике события OnKeyPress на созданную процедуру EditKeyPress. Теперь каждый компонент, который вы выбрали, будет воспринимать
клавишу Enter как Tab. Если вы хотели видеть данную функциональность на уровне формы (по сравнению с элементами управлениями), сотрите в Инспекторе Объектов у всех элементов обработчики событий OnKeyPress и сошлитесь на созданную процедуру EditKeyPress в
обработчике OnKeyPress _формы_. Затем измените Sender на ActiveControl и установите свойство формы KeyPreview в True:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
If Key = #13 Then
begin
SelectNext(ActiveControl as tWinControl, True, True );
Key := #0;
end;
end;
Это позволит любому элементу на форме (по возможности) воспринимать клавишу Enter как клавишу Tab.
Dummes (2004-07-21 10:20:00) [2]А как этот способ?...
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then begin
Perform(WM_NEXTDLGCTL,0,0);
Key := #0;
end;
end;
Anatoly Podgoretsky (2004-07-21 09:55:00) [3]Нет только в рамках приложения, это грубейшее нарушение интферфейса Виндоус
Dummes (2004-07-21 09:51:00) [4]Переходить к следующему полю ввода по Enter
http://delphi4all.narod.ru/alg/justify.h
Компоненты ввода Memo, Edit и RichEdit имеют функцию отмены. Этот пример показывает, как определить, возможна ли отмена, и как отменить последнее действие.
procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.KeyPreview := true;
end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
c: TControl;
begin
if Key <> 13 then Exit;
repeat
c := Form1.FindNextControl(Form1.ActiveControl, true, true, true);
(c as TWinControl).SetFocus;
until c is TEdit;
end;
lightix (2004-07-21 09:17:00) [5]Вот так вот у меня работает, но как то кривовато
if(Key == VK_RETURN)
FindNextControl(ActiveControl, true, true, false)->SetFocus();
lightix (2004-07-21 09:08:00) [6]А без KeyDown можно как то глобально переопределить?
У меня был даже где то пример но я его потерял :(
Просто когда KeyPreview = true то не обрабатываются OnKeyDown на самих компонентах.
Sandman25 (2004-07-21 09:05:00) [7]Form.KeyPreview
OnKeyDown
ActiveControl
WM_NEXTCTLDLG