Привет Всем!
Столкнулся вот с такой проблемкой: стандартная навигация по компонентам в Windows это нажатие <Tab>. У меня на форме много полей ввода TEdit и мне необходимо сделать переход и навигацию между ними по клавишам <стрелка вниз> <стрелка вверх> <Enter>. Причём в промежутке между Tedit-ами могут встретиться и другие компоненты.
Заранее благодарен.
Здравствуйте Паха, Вы писали:
П>Привет Всем! П>Столкнулся вот с такой проблемкой: стандартная навигация по компонентам в Windows это нажатие <Tab>. У меня на форме много полей ввода TEdit и мне необходимо сделать переход и навигацию между ними по клавишам <стрелка вниз> <стрелка вверх> <Enter>. Причём в промежутке между Tedit-ами могут встретиться и другие компоненты. П>Заранее благодарен.
Работает нормально!
procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.KeyPreview := True;
end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
Direct: Boolean;
begin
Case Key of
VK_UP: begin
Direct := False;
end;
VK_DOWN: begin
Direct := True;
end;
end;
if Sender is TWinControl then begin
FindNextControl(Form1.ActiveControl,Direct,False,False).SetFocus;
end;
Key := 0;
end;
Безвыходных ситуаций не бывает, это просто такое состояние головного мозга!!!
Здравствуйте Паха, Вы писали:
П>Привет Всем! П>Столкнулся вот с такой проблемкой: стандартная навигация по компонентам в Windows это нажатие <Tab>. У меня на форме много полей ввода TEdit и мне необходимо сделать переход и навигацию между ними по клавишам <стрелка вниз> <стрелка вверх> <Enter>. Причём в промежутке между Tedit-ами могут встретиться и другие компоненты. П>Заранее благодарен.Более правильно! Вообщем идея думаю понятна!
if (Sender is TWinControl) and ((Key=VK_UP) or (Key=VK_DOWN)) then begin
FindNextControl(Form1.ActiveControl,Direct,False,False).SetFocus;
Key := 0;
end;
Безвыходных ситуаций не бывает, это просто такое состояние головного мозга!!!
Здравствуйте AIR.
Спасибо огромное. Всё получилось. Теперь вот в дополнение вопрос возник:
а как определить тип компонента, который активен в данный момент TEdit, TMemo, TButton....
Чтобы корректно обрабатывать нажатие <Enter> (или переходить на следующий компонент или выполнять какое-либо действие)?
Здравствуйте Паха, Вы писали:
П>Здравствуйте AIR. П>Спасибо огромное. Всё получилось. Теперь вот в дополнение вопрос возник: П>а как определить тип компонента, который активен в данный момент TEdit, TMemo, TButton.... П>Чтобы корректно обрабатывать нажатие <Enter> (или переходить на следующий компонент или выполнять какое-либо действие)?
var
S:String;
begin
S:='Unknown';
if Form1.ActiveControl.ClassName = 'TButton' then
S:='TButton';
if Form1.ActiveControl.ClassName = 'TEdit' then
S:='TEdit';
ShowMessage(Format('I: This is a %s class!',[S]));
{================================================}
S:='Unknown';
if Form1.ActiveControl is TButton then
S:='TButton';
if Form1.ActiveControl is TEdit then
S:='TEdit';
ShowMessage(Format('II: This is a %s class!',[S]));
end;
Безвыходных ситуаций не бывает, это просто такое состояние головного мозга!!!