| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > VB6 > Запуск программы и модальность окон |
| Автор: Juffin 26.5.2005, 11:34 |
| Доброе время суток всем! Есть программа, Main форма которой содержит только таймер и не отображается (hidden). По таймеру программа проверяет всякие условия и по результатам проверки выводит (или не выводит) сообщение пользователю. Это сообщение очень желательно вывести модально для системы, или хотя бы поверх всех открытых окон. Я попробовал сделать форму для вывода этого сообщения, но она появляется не "наверху", а под другими окошками. Я пробовал для вывода сообщения использовать MsgBox (эта штука модальна, как нужно), но хитрые русские юзеры ловко обманывают программу - они не закрывают MsgBox, а просто перемещают его за пределы экрана и все - программа дальше не работает, а ждет ответа... В связи с этим вопрос к гуру: Как же сделать, что бы форма открывалась "поверх" всех окон или как продолжить работу программы с незакрытым MsgBox? Или как программно закрыть этот MsgBox? Всем заранее спасибо! |
| Автор: Mephisto 26.5.2005, 12:44 | ||||
|
| Автор: korob2001 26.5.2005, 12:50 | ||
Добавь в проект ещё одну форму, а на первую добавь кнопку. На событие кнопки кинь этот код.
Думаю пояснять ничего не нужно. Удачи. |
| Автор: Akina 26.5.2005, 13:42 |
| А на зачем тебе Main-форма? Сделай старт не формы, а Sub Main(). Будет проще контролировать действия юзера. А еще по тому же таймеру можно сотворить If Form.Visible=True Then Call RestorePositionAndModality() |
| Автор: Mephisto 27.5.2005, 06:11 |
| Juffin, а зачем показывать MsgBox, если ты его программно собираешься закрыть? Можешь с этого момента подробней? |
| Автор: Juffin 27.5.2005, 13:21 | ||||
2Mephisto: На самом деле я использую MsgBox только потому, что он модален и выскакивает "поверх всех". Добавлено @ 13:23
2Akina: А как без формы работать с таймером? Мне нужно отслеживать произвольные промежутки времени (задается настройками). |
| Автор: Juffin 27.5.2005, 14:38 | ||||
2Mephisto: А как в проекте VB объявить SetWindowPos? |
| Автор: __Sergey__ 27.5.2005, 15:01 |
| Чтобы без формы использовать таймер надо юзать АПИ: SetTimer and KillTimer |
| Автор: Mephisto 27.5.2005, 19:56 |
| Есть специальная утилита для декларации функций АПИ. Лежит в пуске, возле самого ВБ в подкоталоге. Зайти в пуск, там найдешь. Нажмешь "загрузить файл", в разделе Declares наберешь SetWindowPos и запостишь это в раздел General. Короче, если никто не поможет, завтра напишу пример! |
| Автор: __Sergey__ 31.5.2005, 10:53 | ||
|
| Автор: Juffin 31.5.2005, 12:06 | ||
| Всем огромное спасибо!!! Именно SetWindowPos сделала все, что мне нужно! А вызывал я ее вот так:
Именно так окно не меняет ни размера, ни положения и вытаскивается "на самый верх". Еще раз всем спасибо. |
| Автор: efedron 3.6.2005, 19:09 | ||
Mephisto
это все правильно, а как во время выполнения сделать окно неактивным (в соответствии с z-порядком)? |
| Автор: Akina 6.6.2005, 08:19 |
| efedron http://forum.vingrad.ru/index.php?act=module&module=vingradfaq&article_num=002864 Значения флагов - очевидны (для знающих аглицкий) или подробнее в MSDN. |
| Автор: efedron 7.6.2005, 10:09 |
| Akina в том-то все и дело, что если сказать swp_noactive, а окно до этого уже было активным, то фокус оно не отдает |
| Автор: Akina 7.6.2005, 10:33 | ||
Ну ты дал... а с какого перепугу оно должно отдать фокус? и куда? это надо делать явно, руками... |
| Автор: efedron 7.6.2005, 15:40 |
| Akina мне надо чтоб окно программно отдало фокус другому окну, как будто бы пользователь нажал альт-таб |
| Автор: Akina 7.6.2005, 16:10 |
| Ну и пошли в систему это нажатие - пусть сама разбирается... |
| Автор: efedron 7.6.2005, 21:38 |
| Akina тогда немножко проступет окошко выбора окон как при настоящем нажатии альт-таб |