Навигация по Tab между разными ActiveX формами

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
Пабло
Сообщения: 33
Зарегистрирован: 15 авг 2006, 15:22

Добрый день!

Исходные данные: Есть стандартная форма(TMyForm) с парочкой TEdit и парочкой ActiveX форм. При переключении между контролами по Tab, как только попадаю в ActiveX форму курсор обратно по Tab в следующую ActiveX форму не переходит, он остается в предыдущей ActiveX форме и благополучно циклично переключается между ее контролами.

Вопрос: Есть у кого-нить идеи на тему как сделать так чтобы по табуляции можно было перескакивать из одной ActiveX формы в другую?
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

А по Ctrl+TAB ?
Пабло
Сообщения: 33
Зарегистрирован: 15 авг 2006, 15:22

Да там разницы нет, что по Tab что по Ctrl+Tab, курсор просто бегает по контролам внутри ActiveX формы и все.
Пабло
Сообщения: 33
Зарегистрирован: 15 авг 2006, 15:22

Может у кого-нибудь все-таки есть соображения по этому поводу?
Пабло
Сообщения: 33
Зарегистрирован: 15 авг 2006, 15:22

Позвольте еще разок поднять тему... надеюсь на ваши советы!

Исходные данные: есть форма(MyForm:TForm), на ней лежать Edit1:TEdit, Edit2:TEdit и моя ActiveX форма AXForm:TActiveFormX. На AXForm, лежат три компонента TEdit: Edit3, Edit4, Edit5.

Задача: обеспечить переключение между елементами Edit1, Edit2, Edit3, Edit4, Edit5 по Tab.

Если создать два проекта, один из которых будет реализовывать ActiveX форму, а второй приложение с формой MyForm, то по умолчанию навигация по Tab будет работать следующем порядке: Edit1, Edit2, Edit3, Edit1, Edit2, ... т.е. попасть с помощью Tab на элементы Edit4 и Edit5 никак не получится. Так происходит потому что ActiveX форма не обрабатывает нажатие клавишы Tab. Для того чтобы она начала это делать, нужно перекрыть WndProc ActiveX формы и в ней выставлять result=1 для сообщения CM_WANTSPECIALKEY. Но как только я так делаю, появляется новый баг, а именно попадай по клавише Tab в ActiveX форму, я больше из этой формы по клавише Tab выйти не смогу. Т.е. навигация по Tab будет работать в следующем порядке: Edit1, Edit2, Edit3, Edit4, Edit5, Edit3, Edit4, Edit5,...

Пробовал сделать так, чтобы как только по клавише Tab я дохожу до последнего элемента ActiveX формы, то на последующие события CM_WANTSPECIALKEY устанавливать result в 0. Тогда обработка клавиши Tab ActiveX формой прекращается и начинается обработка клавиши Tab в главной формы. НО, дело в том что как только я попадаю в ActiveX форму второй раз, мне нужно установить курсор опять на Edit3, но непонятно условие по которому мне нужно это сделать...

Есть идеи?
Dr_Grizzly
Сообщения: 407
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

Если на родительскую форму бросить Таймер, и отслеживать фокус и нажатие клавиши Таb то думаю должно получится, там ты сможешь как тебе угодно управлять фокусом. На крайняк, можно бросить два таймера, на форму и активХ, и когда на первой форме фокус дошел до последнего едита и была нажата клавиша ТаB то переключать на активХ на первый едит, и включать его таймер, в нем картина та же самая только наоборот.
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто! ;) Да! Кстати! Ctrl+V реально вставляет!!! ХDD
Пабло
Сообщения: 33
Зарегистрирован: 15 авг 2006, 15:22

Не совсем понял зачем нужен таймер, но в любом случае такой вариант не подходит, нужно сделать так чтобы это работало для всех ActiveX, вне зависимости есть там таймер или нет.
Можно конечно попробовать повесить хук на нажатие клавиши Tab и попробовать с помощью API перебирать окна и смотреть куда можно далее перевести фокус.
Ответить