Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
23 / 23 / 2
Регистрация: 17.06.2008
Сообщений: 613
1

Как избежать попадания в фокус кнопок на форме при нажатии клавиш на клавиатуре?

31.07.2011, 23:49. Показов 1630. Ответов 5
Метки нет (Все метки)

На форме есть несколько полей Edit и кнопок BitBtn.

у полей проставлены TabStop=true и в TabOrder порядковые номера обхода.
У кнопок TabStop=false.

По нажатию кнопки Tab на клавиатуре происходит обход полей - без вопросов.
Но если пользователь нажимает кнопку "стрелка вниз" или "стрелка вверх", то в обход попадают и кнопки, что крайне не желательно, поскольку кнопки отвечают за очистку полей.
При чем сначала производится обход всех полей, потом всех кнопок.

Подскажите, пожалуйста, как можно этого избежать?

у меня на каждый элемент прописано примерно следующее:

Delphi
1
2
3
4
5
6
procedure TF_AddZrem.EditPrimechanKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if key=38 then DateEditOkonch.SetFocus;    //нажатие "стрелки вверх"
  if (key=13) or (key=40) then EditOkonch.SetFocus;    /нажатие "Enter" или "стрелки вниз"
end;
то есть, чисто теоретически, кнопки попадать в обход не должны. Однако попадают. Что не так?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.07.2011, 23:49
Ответы с готовыми решениями:

При нажатии стрелок фокус передаётся по компонентам на форме. Как этого избежать ?
Приветствую! Мне необходимо сделать так, чтобы при нажатии стрелок фокус не передавался другим...

TButton - нажатие кнопок на форме при нажатии стрелок на клавиатуре
Подскажите пожалуйста, мне нужно что-бы при нажатии стрелок на клавиатуре нажимались кнопки на...

Как организовать штриховку определенной области при нажатии клавиш на клавиатуре?
как организовать штриховку определенной области при нажатии клавиш на клавиатуре ?

Отключаются порты USB при нажатии клавиш на клавиатуре
Доброго времени суток.Столкнулся с такой проблемой-переустановил винду SP3,драйвера скачал с...

__________________
5
2564 / 1845 / 401
Регистрация: 11.09.2009
Сообщений: 6,858
01.08.2011, 00:38 2
Grusha, попробуйте в конец обработки каждого if поставить Key:= 0, чтобы не передавать нажатие дальше.
0
23 / 23 / 2
Регистрация: 17.06.2008
Сообщений: 613
01.08.2011, 00:47  [ТС] 3
i8085, как то так?


Delphi
1
2
3
4
5
6
7
8
9
procedure TF_AddZrem.EditNomZremKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if key=38 then
     begin
        DateEditZrem.SetFocus;
        Кеу:=0 ;
     end;
end;
0
Житель Земли
2836 / 2706 / 375
Регистрация: 26.07.2011
Сообщений: 10,768
Записей в блоге: 1
01.08.2011, 13:26 4
поставь всем Эдитам такой код:
Delphi
1
2
3
4
5
6
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = VK_RETURN then
  SendMessage(Handle,WM_NEXTDLGCTL,0,0);
end;
вместо VK_RETURN можно писать VK_UP, VK_DOWN (реакция на стрелки). в этом случае перехода на кнопки не будет (если TabOrder у них false)
0
23 / 23 / 2
Регистрация: 17.06.2008
Сообщений: 613
01.08.2011, 22:33  [ТС] 5
DenNik, у меня последняя для обхода по Tab - кнопка "Выход" ("ButtonExit").
Именно с неё курсор "убегает" на кнопочки очистки.
Я закомментировала свой код и сделала ваш вариант - не помогло.
Возможно для КНОПКИ, а не для поля ввода EDIT код процедуры будет другой?

Delphi
1
2
3
4
5
6
7
8
procedure TF_AddZrem.ButtonExitKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
//  if key=38 then DateEditOkonch.SetFocus;
//  if key=40 then DateEditZrem.SetFocus;
if Key = VK_RETURN then
  SendMessage(Handle,WM_NEXTDLGCTL,0,0);
end;
0
Житель Земли
2836 / 2706 / 375
Регистрация: 26.07.2011
Сообщений: 10,768
Записей в блоге: 1
04.08.2011, 09:44 6
используй вместо BitBtn кнопку SpeedButton. она не получает фокус
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.08.2011, 09:44

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Фокус на input при нажатии клавиш клавиатуры
Как сделать чтобы при вводе с клавиатуры, например фамилии, фокус сразу же устанавливался на нужный...

Как сделать плавную смену картинок при нажатии клавиш "стрелок" на клавиатуре
В примере указанном по ссылке: http://www.litecode.ru/javascript/xfade.shtml картинки сменяются...

Как сделать плавную смену картинок при нажатии клавиш "стрелок" на клавиатуре
В примере указанном по ссылке: http://www.litecode.ru/javascript/xfade.shtml картинки сменяются...

Приложение, которое при нажатии на клавиатуре клавиш ‘1’, ‘2’, ‘3’ или ‘4’ открывает окна
Напишите приложение, которое при нажатии на клавиатуре клавиш ‘1’, ‘2’, ‘3’ или ‘4’ открывает...

Спрятать кнопку на форме при нажатии кнопки на клавиатуре
Всем привет, есть задание создать калькулятор, и при нажатии кнопки "Ентер" должна исчезнуть одна...

Срабатывание кнопок button при нажатии определённых клавиш
Написал калькулятор, но без ввода с нампада. Нужно его добавить. пробовал так: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.