Команда: Жать событие?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Adolf
Новичок
Новичок
 
Сообщения: 44
Зарегистрирован: 30.01.2005 (Вс) 11:01
Откуда: Ленинградская область, город Гатчина

Команда: Жать событие?

Сообщение Adolf » 01.02.2005 (Вт) 20:15

В общем у меня существует следующая проблема:
При активации события (нажатием кнопки), у меня происходит действие, затем мне нужно сделать так что бы произошло второе действие, но только через определенное время, как это сделать.

Активация
Действие 1
Ждать (допустим 10 секунд) (?)
Действие 2

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 01.02.2005 (Вт) 20:17

Оцени функцию Sleep
Код: Выделить всё
'This project needs a button
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub Command1_Click()
    'KPD-Team 1998
    'URL: http://www.allapi.net/
    'E-Mail: KPDTeam@Allapi.net
    Me.Caption = "Your system will sleep 5 sec."
    'Sleep for 5000 milliseconds
    Sleep 5000
    Me.Caption = ""
End Sub
Private Sub Form_Load()
    Me.Caption = ""
    Command1.Caption = "Sleep ..."
End Sub

Александр80
Bonachón
Bonachón
 
Сообщения: 659
Зарегистрирован: 20.03.2004 (Сб) 23:50
Откуда: г.Москва

Re: Команда: Жать событие?

Сообщение Александр80 » 01.02.2005 (Вт) 20:38

Adolf писал(а):Активация
Действие 1
Ждать (допустим 10 секунд) (?)
Действие 2


Что-то не доброе затеял... :wink:

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Re: Команда: Жать событие?

Сообщение Ramzes » 01.02.2005 (Вт) 20:43

Александр80 писал(а):
Adolf писал(а):Активация
Действие 1
Ждать (допустим 10 секунд) (?)
Действие 2


Что-то не доброе затеял... :wink:


С чего ты взял?

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 01.02.2005 (Вт) 20:44

...и пошёл флуд...

{offtop}Привет, Sebas! :D{/offtop}

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 01.02.2005 (Вт) 20:50

где тут флуд?

[off]
ну привет себас :oops:
[/off]

Александр80
Bonachón
Bonachón
 
Сообщения: 659
Зарегистрирован: 20.03.2004 (Сб) 23:50
Откуда: г.Москва

Re: Команда: Жать событие?

Сообщение Александр80 » 01.02.2005 (Вт) 20:56

Ramzes, мне так кажется... :lol: :wink:
Через десять секунд, можно запустить что-то не очень хорошее... :? Хотя конечно это можно сделать и по другому... :wink:

Amed, флуда тут нет :lol: :wink:

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 01.02.2005 (Вт) 21:01

да но можно и что-то полезное

[off]
ну привет себас (еще раз) :oops:
[/off]

Adolf
Новичок
Новичок
 
Сообщения: 44
Зарегистрирован: 30.01.2005 (Вс) 11:01
Откуда: Ленинградская область, город Гатчина

Сообщение Adolf » 01.02.2005 (Вт) 22:37

Amed
Нет, Sleep он просто отключает действие программы, продолжать работать невозможно, мне нужно, что все работало и только произошла задержка определенного действия.

Например:

Private Sub cmd..._Click()

If lbl1.Caption = "..." Then
lbl2.Caption = "..."
Далее проходит 10 секунд <-Как описать данное действие.
lbl2.Caption = "..."
...

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 01.02.2005 (Вт) 22:41

Тогда так:

Код: Выделить всё
Private Declare Function GetTickCount Lib "kernel32" Alias "GetTickCount" () As Long

Private Sub cmd..._Click()
Dim Time1 As Long, Time2 As Long

If lbl1.Caption = "..." Then
lbl2.Caption = "..."

Time1 = GetTickCount
Time2 = Time1

Do While Time2 - Time1 < 10000
Time2 = GetTickCount
DoEvents
Loop

lbl2.Caption = "..."
...

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 01.02.2005 (Вт) 22:44

Может,
Код: Выделить всё
Private Sub cmd..._Click()
Dim T!
If lbl1.Caption = "..." Then
lbl2.Caption = "..."
T = Timer
Do Until Timer - T >= 10000
Me.Caption = 10 - Int(Timer - T)
DoEvents
Loop
lbl2.Caption = "..."
Я малость не врубон, что нужно афтару, но если Sleep не подходит... Тогда, наверное, это... Или SleepEx? :roll:

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 01.02.2005 (Вт) 22:44

Тьфу ты елки-палки! :(

Adolf
Новичок
Новичок
 
Сообщения: 44
Зарегистрирован: 30.01.2005 (Вс) 11:01
Откуда: Ленинградская область, город Гатчина

Сообщение Adolf » 02.02.2005 (Ср) 20:00

Все, желаемый результат получил, очень признателен за помощь.

Zer
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 460
Зарегистрирован: 26.09.2003 (Пт) 13:08
Откуда: Нижний Новгород

Сообщение Zer » 02.02.2005 (Ср) 20:24

А если в это время надо выполнять какие-то действия, а не просто ждать???
Microsoft DirectX - Маломягкий Прямой Х...
Не откладывай на завтра то, что можно выпить сегодня...

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 02.02.2005 (Ср) 20:34

Просто добавить флаг ActionsDone As Boolean и ставить его в True по выполнении действий

Код: Выделить всё
Private Declare Function GetTickCount Lib "kernel32" Alias "GetTickCount" () As Long

Private Sub cmd..._Click()
Dim Time1 As Long, Time2 As Long

If lbl1.Caption = "..." Then
lbl2.Caption = "..."

Time1 = GetTickCount
Time2 = Time1

Do While Time2 - Time1 < 10000
Time2 = GetTickCount
DoEvents
Loop

If ActionsDone Then
lbl2.Caption = "..."
...
End If

Zer
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 460
Зарегистрирован: 26.09.2003 (Пт) 13:08
Откуда: Нижний Новгород

Сообщение Zer » 02.02.2005 (Ср) 21:01

Не, я имею ввиду он будет крутится на:
Код: Выделить всё
Do While Time2 - Time1 < 10000
Time2 = GetTickCount
DoEvents
Loop

Ентого не надо... ...надо чтобы он оттуда(из подпрограммы) уходил, а потом, ерез некоторое время, активировалась другая подпрограмма...
Microsoft DirectX - Маломягкий Прямой Х...
Не откладывай на завтра то, что можно выпить сегодня...

Adolf
Новичок
Новичок
 
Сообщения: 44
Зарегистрирован: 30.01.2005 (Вс) 11:01
Откуда: Ленинградская область, город Гатчина

Сообщение Adolf » 03.02.2005 (Чт) 10:38

Zer
Используй код, который мне рекомендовал A.A.Z., я правда его немного изменил, как мне нужно.

Adolf
Новичок
Новичок
 
Сообщения: 44
Зарегистрирован: 30.01.2005 (Вс) 11:01
Откуда: Ленинградская область, город Гатчина

Сообщение Adolf » 03.02.2005 (Чт) 12:31

Еще вопрос:
Какой код нужно ввести, что если исполняется одно из всех данных условий, то действия сразу же прекращалось.

Просто конечный результат действия одно условия совпадает с начальным другого, в результате чего действее сразу перекидывается на следуующий цикл и так далее. Как это избежать?

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 03.02.2005 (Чт) 15:41

Ну, можно так (хотя я опять не понял, что нужно афтару):
Код: Выделить всё
If <условие1> Or <условие2> Or ... Or <условиеN> Then Exit Sub

Chuvack
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 51
Зарегистрирован: 20.01.2005 (Чт) 20:59
Откуда: Россия

Сообщение Chuvack » 03.02.2005 (Чт) 15:55

У меня возник вопрос. Как узнать сколько времени(в миллисекундах) продолжалось событие. :?:

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 03.02.2005 (Чт) 16:58

Код: Выделить всё
Private Declare Function GetTickCount Lib "kernel32" Alias "GetTickCount" () As Long

Private Sub Form_Load()
Dim Time1 As Long, Time2 As Long

Time1 = GetTickCount
'... действия
'... действия
'... действия
Time2 = GetTickCount

MsgBox "Действия продолжались " & (Time2 - Time1) / 1000 & " с."
End Sub


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 163

    TopList