Проблемы при работе с окнами с помощью WinAPI

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

Проблемы при работе с окнами с помощью WinAPI

Сообщение MiGan » 07.11.2005 (Пн) 18:45

У меня такая проблема: есть большая такая форма (ex. frmBigForm), отображаемая модально с помощью frmBigForm.Show vbModal. На ней расположен элемент TabStrip, насчитывающий 9 вкладок. Каждая вкладка - некий раздел большого объекта. Общее количество свойств данного объекта настолько велико, что отобразить с помощью элементов управления в пределах одной формы нереально (бэйзик ругается на превышения макс. числа элементов на форме...) Поэтому целесообразно группы элементов управления разбить по формам и подгружать их динамически по мере того, как пользователь будет щелкать по вкладкам TabStrip. Поскольку моя главная форма отображена модально, а хочется чтобы подгружаемые формы модальными не были, то метод frmPageForm.Show не работает (frmPageForm - одна из динамических форм, которые нужно подгружать...). Поэтому, было решено использовать API функцию ShowWindow для того, чтобы в обход бэйсика заставить отобразиться это окно. Предварительно, оно приаттачивается к PictureBoxу формы frmBigForm с помощью метода SetParentWnd, чтобы корректно размещаться на экране (относительно левого верхнего угла этого пикчурбокса). Все работает, форма динамически загружается. Но что-то не так с ней. Если теперь из этой пришпиленной формы попытаться сделать модальный вызов какой-либо другой (нормальной) формы (например frmSomeModal), то после закрытия frmSomeModal пришпиленная форма больше не получит фокуса... Никогда... Т.е., она по прежнему будет отображаться при следуюем щелчке по соответствующей вкладке TabStripа, но ни один из ее элементов фокуса не получит!!! Очень нужна помощь, хоть какая-нибудь. Опухшими глазами я уже устал протирать MSDN в поисках ответов... Помогите...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 07.11.2005 (Пн) 18:55

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

MiGan
Обычный пользователь
Обычный пользователь
 
Сообщения: 60
Зарегистрирован: 02.05.2005 (Пн) 13:27

Сообщение MiGan » 07.11.2005 (Пн) 19:00

Да, но во первых, это жутко неудобно (нужно будет по индексу выискавать, что куда и откуда...). Во вторых, для этого придется переписывать все к хренам! Мне хочется получить ответ именно по моей проблеме и именно от тех, кто сталкивался с чем то подобным и знает, что с этим можно сделать. Всякие разпредложения, типа "возьми-ка ActiveX такой-то и не парься" - мне не нужны. Хочется разобраться, в чем именно проблема у меня!!!!

MiGan
Обычный пользователь
Обычный пользователь
 
Сообщения: 60
Зарегистрирован: 02.05.2005 (Пн) 13:27

Ну помогите же...

Сообщение MiGan » 08.11.2005 (Вт) 10:06

Товарищи, никто не на знает что -ли, в чем может таиться ошибка? Или всех всегда устраивал урезанный функционал бэйсика для создания интерфейса???

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 08.11.2005 (Вт) 10:19

А в чем заключается урезанность функционала бейсика?
Lasciate ogni speranza, voi ch'entrate.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 08.11.2005 (Вт) 11:50

Товарищи, никто не на знает что -ли, в чем может таиться ошибка? Или всех всегда устраивал урезанный функционал бэйсика для создания интерфейса???


Ошибка в том, что не надо подсовывать японской бензопиле стальные рельсы.

Наверняка часть свойств являются необязательными или редко используемыми. Почему бы их не вынести в отдельные формы и показывать все же модально?

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

Однако, этот глюк с получением фокуса кажется смутно знакомым. При разработке универсального дропдауна (см. кирпичи) в некоторых случаях форма с ним, показанная модально, не могла получить фокус при скрытии окна дропдауна. Лечил с помощью сабклассинга всех окон, участвующих в процессе, и изучением и обработкой принимаемых ими сообщений.
Лучший способ понять что-то самому — объяснить это другому.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 08.11.2005 (Вт) 12:03

Рекомендую все же прислушаться к совету, который дал GSerg. У меня отладка дропдауна заняла две недели, переделка контролов в массивы займет максимум пару дней. А если вместо рук использовать мозги, то и пару часов.
Поясняю. Например, вместо имени контрола можно использовать tag. Временно подключив к проекту VB Extensibility, можно написать простенькую процедуру, которая скопирует название контрола в его тег. А все выражения типа txtAddress.Text = s можно заменить на GetElementByTag("txtAddress").Text. Что такое GetElementByTag, я думаю, объяснять не нужно. Копи-пейст строчки GetElementByTag(" единственный процесс, который придется делать ручками.
Лучший способ понять что-то самому — объяснить это другому.

MiGan
Обычный пользователь
Обычный пользователь
 
Сообщения: 60
Зарегистрирован: 02.05.2005 (Пн) 13:27

Сообщение MiGan » 08.11.2005 (Вт) 13:16

Antonariy писал(а):
Товарищи, никто не на знает что -ли, в чем может таиться ошибка? Или всех всегда устраивал урезанный функционал бэйсика для создания интерфейса???


Да, это именно оно. В общем понял. Вы меня отговорили, потому что гемора видимо больше будет с его отладкой... :cry:


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

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

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

    TopList