Страница: 1 |
В функции выполняющей расчеи, я так понимаю, что там цикл, так вот, в теле цикла ставишь инструкцию DoEvents, на своей форме делаешь кнопку прервания расчета, там пишишь, хотя лучше пример: Private FlagAbort as Boolean Private Sub Rashet () Flagbort = False ........... While Not i=0 DoEvents .... If FlagAbort = True Then i=0 .... Wend End Sub Private Sub cmnAbort () FlagAbort = True End Sub А по моему проверка свойств объектов сильно тормозит цикл. Лече переменную BOOLEAN ввести. Option Explicit Private Sub Command1_Click() Private Sub Command2_Click() start = Now For i = 1 To 30000 start = Now - start Разница 1 секунда в пользу Boolean 14/15 Разница огромна! Когда я писал кодировщик Z-15 ( Я уже выложил в B-тест ) Явместо текстбокса использовал стринг - разница почти в 200 раз. Страница: 1 |
Вопрос: Принудительная остановка проги
Добавлено: 25.07.03 09:06
Автор вопроса: Оллл
Подскажите пожалуйста, как правильно решить такую задачу: из формы запускается некий очень длительный расчет. Юзер хочет в какой то момент остановить его. Есть ли в ВБ возможность сделать на этой модальной форме кнопку, нажав на которую в любой момент можно было бы прервать выполнение проги? Или есть какая-нибудь функция, отслеживающая нажатие клавиш (вероятно API-шная?), чтобы по определенной комбинации можно было остановить прогу.
Ответы
Всего ответов: 6
Номер ответа: 1
Автор ответа:
DimaS
Вопросов: 2
Ответов: 85
Профиль | | #1
Добавлено: 25.07.03 09:29
Номер ответа: 2
Автор ответа:
Оллл
Вопросов: 41
Ответов: 43
Профиль | | #2
Добавлено: 25.07.03 10:45
Спасибо, все работает!
Номер ответа: 3
Автор ответа:
Malyav
ICQ: 8440085
Вопросов: 15
Ответов: 117
Web-сайт:
Профиль | | #3
Добавлено: 25.07.03 20:24
А еще можно так
По клику капчион кнопки меняется на, например "Остановлено"
А в цикле делаешь выход по такому флагу
Do while Command1.Caption <> "Остановлено"
...
Loop
мало чем отличается от предидущего оратора, только память экономится.
Номер ответа: 4
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #4
Добавлено: 27.07.03 08:55
Номер ответа: 5
Автор ответа:
Malyav
ICQ: 8440085
Вопросов: 15
Ответов: 117
Web-сайт:
Профиль | | #5
Добавлено: 27.07.03 19:19
Dim stopped As Boolean
'Command1.Caption = "Остановлено"
stopped = True
End Sub
Dim i As Long
Dim start As Date
'For i = 1 To 30000
' Label1 = i
' DoEvents
' If Command1.Caption = "Остановлено" Then Exit For
'Next
Label1 = i
DoEvents
If stopped = True Then Exit For
Next
MsgBox start
End Sub
Номер ответа: 6
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #6
Добавлено: 28.07.03 05:45