Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Принудительная остановка проги Добавлено: 25.07.03 09:06  

Автор вопроса:  Оллл
Подскажите пожалуйста, как правильно решить такую задачу: из формы запускается некий очень длительный расчет. Юзер хочет в какой то момент остановить его. Есть ли в ВБ возможность сделать на этой модальной форме кнопку, нажав на которую в любой момент можно было бы прервать выполнение проги? Или есть какая-нибудь функция, отслеживающая нажатие клавиш (вероятно  API-шная?), чтобы по определенной комбинации можно было остановить прогу.

Ответить

  Ответы Всего ответов: 6  

Номер ответа: 1
Автор ответа:
 DimaS



Вопросов: 2
Ответов: 85
 Профиль | | #1 Добавлено: 25.07.03 09:29

В функции выполняющей расчеи, я так понимаю, что там цикл, так вот, в теле цикла ставишь инструкцию 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

Ответить

Номер ответа: 2
Автор ответа:
 Оллл



Вопросов: 41
Ответов: 43
 Профиль | | #2 Добавлено: 25.07.03 10:45
Спасибо,  все работает!

Ответить

Номер ответа: 3
Автор ответа:
 Malyav



ICQ: 8440085 

Вопросов: 15
Ответов: 117
 Web-сайт: malyav.narod.ru
 Профиль | | #3
Добавлено: 25.07.03 20:24
А еще можно так
По клику капчион кнопки меняется на, например "Остановлено"
А в цикле делаешь выход по такому флагу
Do while Command1.Caption <> "Остановлено"
...
Loop
мало чем отличается от предидущего оратора, только память экономится.

Ответить

Номер ответа: 4
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #4
Добавлено: 27.07.03 08:55

А по моему проверка свойств объектов сильно тормозит цикл. Лече переменную BOOLEAN ввести.

Ответить

Номер ответа: 5
Автор ответа:
 Malyav



ICQ: 8440085 

Вопросов: 15
Ответов: 117
 Web-сайт: malyav.narod.ru
 Профиль | | #5
Добавлено: 27.07.03 19:19

Option Explicit
Dim stopped As Boolean

Private Sub Command1_Click()
'Command1.Caption = "Остановлено"
stopped = True
End Sub

Private Sub Command2_Click()
Dim i As Long
Dim start As Date

start = Now
'For i = 1 To 30000
'    Label1 = i
'    DoEvents
'    If Command1.Caption = "Остановлено" Then Exit For
'Next

For i = 1 To 30000
    Label1 = i
    DoEvents
    If stopped = True Then Exit For
Next

start = Now - start
MsgBox start
End Sub

Разница 1 секунда в пользу Boolean 14/15

Ответить

Номер ответа: 6
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #6
Добавлено: 28.07.03 05:45

Разница огромна! Когда я писал кодировщик Z-15 ( Я уже выложил в B-тест ) Явместо текстбокса использовал стринг - разница почти в 200 раз.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам