Свойства контрола: TabStop и TabIndex

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Arcady_XQST
Обычный пользователь
Обычный пользователь
 
Сообщения: 85
Зарегистрирован: 17.09.2007 (Пн) 1:27
Откуда: Russia, Bryansk

Свойства контрола: TabStop и TabIndex

Сообщение Arcady_XQST » 21.10.2007 (Вс) 23:23

1. Как, не используя SendKeys "{TAB}" передать фокус следующему контролу на форме, и контролу, созданному через CreateWindowEx?

2. Как созданному контролу (через CreateWindowEx) назначить место в цепочке TabIndex? И чтобы при нажатии Tab фокус не обходил этот контрол, а считал его "за свой"? Например: есть две кнопки; добавляем кодом третью. При нажатии Tab фокус работает между 2-мя кнопками (1-й и 2-й). Необходимо вставить кнопку созданную кодом в эту цепочку под своим индексом, например 2 (0,1 - первые две кнопки).
// тили-тили, трали-вали
if (jsLoaded) {
// это дело мне по силе, откажусь теперь едва ли
} else {
// это мы не проходили, это нам не задавали
}

EUGY
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 214
Зарегистрирован: 09.11.2006 (Чт) 22:51
Откуда: Мурманск

Сообщение EUGY » 22.10.2007 (Пн) 1:40

:idea:
1. можно через GetNextDlgTabItem
2. окно созданное через CreateWindowEx поместить не на форму а на usercontrol и использовать его свойство TabIndex, или писать свою процедуру типа IsDialogMessage.

Arcady_XQST
Обычный пользователь
Обычный пользователь
 
Сообщения: 85
Зарегистрирован: 17.09.2007 (Пн) 1:27
Откуда: Russia, Bryansk

Сообщение Arcady_XQST » 23.10.2007 (Вт) 11:38

1. Спасибо!
2. Если писать функцию, то какой у неё должен быть принцип? Как, например, в приложениях C++ реализуется расстановка TabIndex'ов контролам?
// тили-тили, трали-вали
if (jsLoaded) {
// это дело мне по силе, откажусь теперь едва ли
} else {
// это мы не проходили, это нам не задавали
}

EUGY
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 214
Зарегистрирован: 09.11.2006 (Чт) 22:51
Откуда: Мурманск

Сообщение EUGY » 24.10.2007 (Ср) 1:54

на с++ можно написать например так:

Код: Выделить всё
void ModalEpisod(HWND hwndmain) //
{
   MSG msg;
   while (GetMessage(&msg, NULL, 0, 0))
   {
      if (!IsDialogMessage(hwndmain,&msg))
      {
         TranslateMessage(&msg);
         DispatchMessage(&msg);
      }
   }
}


IsDialogMessage - это документированная функция из User32.lib.
Если у дочернего окна есть стиль WS_TABSTOP и оно видимо и не заблокировано, то его "tabindex" - это порядковый номер загрузки при CreateWindowEx. Чтобы его сменить можно выгрузить все окна и перезагрузить их заново в нужной последовательности либо обработать WM_GETDLGCODE в каждом дочернем окне.
Вот как-то так.
P.S.
нутро IsDialogMessage:
http://cvs.winehq.com/patch.py?id=1025828582516861871424229

Arcady_XQST
Обычный пользователь
Обычный пользователь
 
Сообщения: 85
Зарегистрирован: 17.09.2007 (Пн) 1:27
Откуда: Russia, Bryansk

Сообщение Arcady_XQST » 28.10.2007 (Вс) 20:00

Спасибо, буду разбираться!
// тили-тили, трали-вали
if (jsLoaded) {
// это дело мне по силе, откажусь теперь едва ли
} else {
// это мы не проходили, это нам не задавали
}

Arcady_XQST
Обычный пользователь
Обычный пользователь
 
Сообщения: 85
Зарегистрирован: 17.09.2007 (Пн) 1:27
Откуда: Russia, Bryansk

Сообщение Arcady_XQST » 29.10.2007 (Пн) 0:02

Если у дочернего окна есть стиль WS_TABSTOP и оно видимо и не заблокировано, то его "tabindex" - это порядковый номер загрузки при CreateWindowEx. Чтобы его сменить можно выгрузить все окна и перезагрузить их заново в нужной последовательности
Не работает.
либо обработать WM_GETDLGCODE в каждом дочернем окне.
Можно поподробнее?
// тили-тили, трали-вали
if (jsLoaded) {
// это дело мне по силе, откажусь теперь едва ли
} else {
// это мы не проходили, это нам не задавали
}

EUGY
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 214
Зарегистрирован: 09.11.2006 (Чт) 22:51
Откуда: Мурманск

Сообщение EUGY » 30.10.2007 (Вт) 18:22

Что значит - не работает?
Вложения
tab.zip
пример на тему ~IsDialogMessage~
(1.84 Кб) Скачиваний: 61

Arcady_XQST
Обычный пользователь
Обычный пользователь
 
Сообщения: 85
Зарегистрирован: 17.09.2007 (Пн) 1:27
Откуда: Russia, Bryansk

Сообщение Arcady_XQST » 02.11.2007 (Пт) 15:39

Спасибо большое! Ещё вопрос: как убрать beep при нажатии Tab или Shift+Tab на новом контроле (Button)?
// тили-тили, трали-вали
if (jsLoaded) {
// это дело мне по силе, откажусь теперь едва ли
} else {
// это мы не проходили, это нам не задавали
}

EUGY
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 214
Зарегистрирован: 09.11.2006 (Чт) 22:51
Откуда: Мурманск

Сообщение EUGY » 02.11.2007 (Пт) 17:47

Вроде надо обработать WM_GETDLGCODE, вернуть DLGC_WANTCHARS.

Arcady_XQST
Обычный пользователь
Обычный пользователь
 
Сообщения: 85
Зарегистрирован: 17.09.2007 (Пн) 1:27
Откуда: Russia, Bryansk

Сообщение Arcady_XQST » 02.11.2007 (Пт) 23:37

EUGY писал(а):Вроде надо обработать WM_GETDLGCODE, вернуть DLGC_WANTCHARS.
Как именно обработать? Можно пример на VB6, если не затруднит? Заранее спасибо.
// тили-тили, трали-вали
if (jsLoaded) {
// это дело мне по силе, откажусь теперь едва ли
} else {
// это мы не проходили, это нам не задавали
}

EUGY
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 214
Зарегистрирован: 09.11.2006 (Чт) 22:51
Откуда: Мурманск

Сообщение EUGY » 03.11.2007 (Сб) 8:59

:arrow:
P.S. Пример упрощен для наглядности. Почитай темы по сабклассингу. Удачи.
Вложения
tab2.zip
обработать WM_GETDLGCODE, вернуть DLGC_WANTCHARS
(2.01 Кб) Скачиваний: 59

Arcady_XQST
Обычный пользователь
Обычный пользователь
 
Сообщения: 85
Зарегистрирован: 17.09.2007 (Пн) 1:27
Откуда: Russia, Bryansk

Сообщение Arcady_XQST » 03.11.2007 (Сб) 22:16

Спасибо ещё раз! Почитаю. :roll:
// тили-тили, трали-вали
if (jsLoaded) {
// это дело мне по силе, откажусь теперь едва ли
} else {
// это мы не проходили, это нам не задавали
}


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 37

    TopList