Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VB6: Выполнение кода во время работы MsgBox. Как победить? / 5 сообщений из 5, страница 1 из 1
10.11.2009, 20:28
    #36302326
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB6: Выполнение кода во время работы MsgBox. Как победить?
При работе под IDE при появлении MsgBox выполнение кода полностью останавливается, эвенты собираются в очередь.
При работе в скомпилированном проекте код может выполняться при открытом MsgBox и тогда, если этот код затронет отображение на экране, проект вываливается с различными ошибками типа
"Can't show non-modal form when modal form is displayed"

Как бы так либо заставить код не выполняться, либо сделать MsgBox немодальным (как вариант, можно сделать собственный немодальный MsgBox, с блэкджеком и шлюхами, но как тогда останавливать выполнение хотя бы того кода, который его вызвал)?
...
Рейтинг: 0 / 0
11.11.2009, 00:13
    #36302641
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB6: Выполнение кода во время работы MsgBox. Как победить?
Shocker.ProПри работе в скомпилированном проекте код может выполняться при открытом MsgBoxЭто нужно было постараться так сделать. :) Насчет примера - Msgbox блокирует стандартный таймер, так что Can't show non-modal form тут не получишь.

Shocker.Pro как тогда останавливать выполнение хотя бы того кода, который его вызвал

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
MyMsgbox.Show

frmMyMsgbox:

Public Sub Show()
    Me.Show 'можно еще ShowWindow с параметром HWND_TOPMOST, чтобы за другими формами не прятался
    While Me.Visible
        DoEvents
    Wend
    Unload Me
End Sub

Private Sub Command1_Click()
    Me.Hide
End Sub

Jah loves you.
...
Рейтинг: 0 / 0
11.11.2009, 00:41
    #36302674
VB6: Выполнение кода во время работы MsgBox. Как победить?
Shocker.Proкак вариант, можно сделать собственный немодальный MsgBox, с блэкджеком и шлюхами, но как тогда останавливать выполнение хотя бы того кода, который его вызвал?Мысли событийно. Вызывающая процедура (метод класса) сохраняет контекст своего выполнения, создаёт экземпляр (не)модального MsgBox-а, передаёт в него параметры, показывает, и... завершает свою работу. (Не)модальный MsgBox генерирует события, типа "юзер нажал OK", "юзер нажал Cancel". Обработчики этих событий на основе сохранённого контекста продолжают обработку.
...
Рейтинг: 0 / 0
11.11.2009, 02:05
    #36302748
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB6: Выполнение кода во время работы MsgBox. Как победить?
13-й кварталShocker.Proкак вариант, можно сделать собственный немодальный MsgBox, с блэкджеком и шлюхами, но как тогда останавливать выполнение хотя бы того кода, который его вызвал?Мысли событийно. Вызывающая процедура (метод класса) сохраняет контекст своего выполнения, создаёт экземпляр (не)модального MsgBox-а, передаёт в него параметры, показывает, и... завершает свою работу. (Не)модальный MsgBox генерирует события, типа "юзер нажал OK", "юзер нажал Cancel". Обработчики этих событий на основе сохранённого контекста продолжают обработку.

Зачем сначала цитировать мой вопрос, а потом отвечать НЕ на него , рассказывая очевидные вещи поучительным тоном? Я довольно ясно выразил свой вопрос. У меня проект, в котором количество вызовов MsgBox измеряется сотнями - проще убиться апстену, чем переписать все вызовы таким образом (которые не были изначально на это расчитаны). Вот Antonariy мысль понял, кажется предложил логичное решение - буду пробовать.

AntonariyЭто нужно было постараться так сделать. :) Насчет примера - Msgbox блокирует стандартный таймер, так что Can't show non-modal form тут не получишь.

Как это, как это не получишь? Я же приложил проект. Ничего он не блокирует, таймер работает. Комментаришь [ой, а давай на ты] в проекте вызов второго MsgBox, раскомментируешь вызов второй формы, запускаешь exe-шник - и пожалуйста:
...
Рейтинг: 0 / 0
11.11.2009, 09:31
    #36302946
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VB6: Выполнение кода во время работы MsgBox. Как победить?
Опять не попробовал сразу скомпилировать. :)

Jah loves you.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VB6: Выполнение кода во время работы MsgBox. Как победить? / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]