Модераторы: Akina

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запуск программы и модальность окон, Запуск программы и модальность окон 
:(
    Опции темы
Juffin
Дата 26.5.2005, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 25.5.2005

Репутация: нет
Всего: нет



Доброе время суток всем!
Есть программа, Main форма которой содержит только таймер и не отображается (hidden).
По таймеру программа проверяет всякие условия и по результатам проверки выводит (или не выводит) сообщение пользователю. Это сообщение очень желательно вывести модально для системы, или хотя бы поверх всех открытых окон. Я попробовал сделать форму для вывода этого сообщения, но она появляется не "наверху", а под другими окошками. Я пробовал для вывода сообщения использовать MsgBox (эта штука модальна, как нужно), но хитрые русские юзеры ловко обманывают программу - они не закрывают MsgBox, а просто перемещают его за пределы экрана и все - программа дальше не работает, а ждет ответа... В связи с этим вопрос к гуру:
Как же сделать, что бы форма открывалась "поверх" всех окон или как продолжить работу программы с незакрытым MsgBox? Или как программно закрыть этот MsgBox?
Всем заранее спасибо!
PM MAIL   Вверх
Mephisto
Дата 26.5.2005, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

Репутация: 2
Всего: 34



Цитата
BOOL SetWindowPos(          HWND hWnd,
    HWND hWndInsertAfter,
    int X,
    int Y,
    int cx,
    int cy,
    UINT uFlags
);

Код

SetWindowPos Me.hWnd,-1,0,0,0,0, &H1 or &H2

PM   Вверх
korob2001
Дата 26.5.2005, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: нет
Всего: 61



Добавь в проект ещё одну форму, а на первую добавь кнопку. На событие кнопки кинь этот код.
Код

Private Sub Command1_Click()
    Form2.Show vbModal
End Sub

Думаю пояснять ничего не нужно.

Удачи.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Akina
Дата 26.5.2005, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



А на зачем тебе Main-форма?
Сделай старт не формы, а Sub Main(). Будет проще контролировать действия юзера.
А еще по тому же таймеру можно сотворить
If Form.Visible=True Then Call RestorePositionAndModality()


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Mephisto
Дата 27.5.2005, 06:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

Репутация: 2
Всего: 34



Juffin, а зачем показывать MsgBox, если ты его программно собираешься закрыть?
Можешь с этого момента подробней?
PM   Вверх
Juffin
Дата 27.5.2005, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 25.5.2005

Репутация: нет
Всего: нет



Цитата(Mephisto @ 27.5.2005, 06:11)
...а зачем показывать MsgBox, если ты его программно собираешься закрыть?

2Mephisto: На самом деле я использую MsgBox только потому, что он модален и выскакивает "поверх всех".

Добавлено @ 13:23
Цитата(Akina @ 26.5.2005, 13:42)
А на зачем тебе Main-форма?
Сделай старт не формы, а Sub Main().

2Akina: А как без формы работать с таймером? Мне нужно отслеживать произвольные промежутки времени (задается настройками).
PM MAIL   Вверх
Juffin
Дата 27.5.2005, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 25.5.2005

Репутация: нет
Всего: нет



Цитата(Mephisto @ 26.5.2005, 12:44)

Код

SetWindowPos Me.hWnd,-1,0,0,0,0, &H1 or &H2

2Mephisto: А как в проекте VB объявить SetWindowPos?
PM MAIL   Вверх
__Sergey__
Дата 27.5.2005, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 21.1.2005

Репутация: 4
Всего: 4



Чтобы без формы использовать таймер надо юзать АПИ:
SetTimer and KillTimer
PM MAIL   Вверх
Mephisto
Дата 27.5.2005, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

Репутация: 2
Всего: 34



Есть специальная утилита для декларации функций АПИ. Лежит в пуске, возле самого ВБ в подкоталоге. Зайти в пуск, там найдешь. Нажмешь "загрузить файл", в разделе Declares наберешь SetWindowPos и запостишь это в раздел General. Короче, если никто не поможет, завтра напишу пример! smile
PM   Вверх
__Sergey__
Дата 31.5.2005, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 21.1.2005

Репутация: 4
Всего: 4



Код

Private Const HWND_TOPMOST As Long = -1


Private Declare Function SetWindowPos Lib "user32.dll" ( _
     ByVal hwnd As Long, _
     ByVal hWndInsertAfter As Long, _
     ByVal x As Long, _
     ByVal y As Long, _
     ByVal cx As Long, _
     ByVal cy As Long, _
     ByVal wFlags As Long) As Long

Private Sub Form_Load()
 SetWindowPos Me.hwnd, HWND_TOPMOST, 100, 100, 100, 100, 0
End Sub

PM MAIL   Вверх
Juffin
Дата 31.5.2005, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 25.5.2005

Репутация: нет
Всего: нет



smile
Всем огромное спасибо!!!
Именно SetWindowPos сделала все, что мне нужно!
А вызывал я ее вот так:
Код

SetWindowPos Form.hwnd, -1, 0, 0, 0, 0, 67

Именно так окно не меняет ни размера, ни положения и вытаскивается "на самый верх".
Еще раз всем спасибо.
PM MAIL   Вверх
efedron
Дата 3.6.2005, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 16.3.2005

Репутация: 4
Всего: 4



Mephisto
Цитата
SetWindowPos Me.hWnd,-1,0,0,0,0, &H1 or &H2

это все правильно, а как во время выполнения сделать окно неактивным (в соответствии с z-порядком)?
--------------------
Прежде чем совершить акт разрезания определенной материи целесообразно удостовериться в правильности всех произведенных измерений.
PM MAIL   Вверх
Akina
Дата 6.6.2005, 08:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



efedron
http://forum.vingrad.ru/index.php?act=modu...icle_num=002864
Значения флагов - очевидны (для знающих аглицкий) или подробнее в MSDN.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
efedron
Дата 7.6.2005, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 16.3.2005

Репутация: 4
Всего: 4



Akina
в том-то все и дело, что если сказать swp_noactive, а окно до этого уже было активным, то фокус оно не отдает smile попробуй, может у тебя получится;)
--------------------
Прежде чем совершить акт разрезания определенной материи целесообразно удостовериться в правильности всех произведенных измерений.
PM MAIL   Вверх
Akina
Дата 7.6.2005, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Цитата(efedron @ 7.6.2005, 11:09)
если сказать swp_noactive, а окно до этого уже было активным, то фокус оно не отдает

Ну ты дал... а с какого перепугу оно должно отдать фокус? и куда? это надо делать явно, руками...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


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

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0586 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.