Таймер с расчетом

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Steel
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 21.04.2006 (Пт) 17:06

Таймер с расчетом

Сообщение Steel » 21.04.2006 (Пт) 17:18

Захотел написать таймер который будет вести время и по окончании выводить скока клиент насидел времени и скока должен заплотить. И столкнулся с тем, что не знаю с чего начать.

Расскажу вам саму суть таймера:
Есть текстовое поле в котором отображается время, нач. время 00.00.00. При нажатии на кнопку СТАРТ идет время, и появляется кнопка СТОП. Если нажать кнопку СТОП, то выведет сумму которую должен заплатить клиент.

Как такое можно реализовать?

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 21.04.2006 (Пт) 17:25

делов то.
При нажатии кнопки СТАРТ запоминай текущее время
При нажатии кнопки СТОП вычитай из текущего времени ранее запомненое. Остается умножить на тариф.

А чтобы отображалось время в текстовом поле, используй таймер с интервалом 1 секунда и в его событии изменяй время в текстовом поле
Весь мир матрица, а мы в нем потоки байтов!

Steel
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 21.04.2006 (Пт) 17:06

Сообщение Steel » 21.04.2006 (Пт) 17:29

При нажатии кнопки СТАРТ запоминай текущее время

Как это сделать кодом?

А чтобы отображалось время в текстовом поле, используй таймер с интервалом 1 секунда и в его событии изменяй время в текстовом поле

Этого тоже не понял :(
Последний раз редактировалось Steel 21.04.2006 (Пт) 17:39, всего редактировалось 1 раз.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 21.04.2006 (Пт) 17:37

Тогда вопрос, а что уже сделано для реализации этого кода?

З.Ы. Текущее время возвращает функция Now. Как ее пользовать смотри MSDN.

Таймер на форму положить думаю труда не составит, установить интервал в 1000 мс (что равно 1 с) тоже думаю сильно не напряжет
Весь мир матрица, а мы в нем потоки байтов!

Steel
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 21.04.2006 (Пт) 17:06

Сообщение Steel » 21.04.2006 (Пт) 17:43

Все таки не могу понять как вывести время в текстовое поле и запустить его :)

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 21.04.2006 (Пт) 17:50

Воспользоваться функцией Format например
Весь мир матрица, а мы в нем потоки байтов!

Steel
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 21.04.2006 (Пт) 17:06

Сообщение Steel » 21.04.2006 (Пт) 18:01

!Viper! писал(а):Воспользоваться функцией Format например

Где можно посмотреть примеры функций?

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 21.04.2006 (Пт) 18:03

Так MSDN то на что?
Весь мир матрица, а мы в нем потоки байтов!

Роман-вб
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 520
Зарегистрирован: 04.04.2006 (Вт) 9:40
Откуда: Средняя полоса

Сообщение Роман-вб » 21.04.2006 (Пт) 18:04

Код: Выделить всё
Private Sub Timer1_Timer()
  Text1.Text = Time$
End Sub
Жить ещё 2 недели, работы на 8 лет, но я докажу на деле, на что способен аскет!

Роман-вб
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 520
Зарегистрирован: 04.04.2006 (Вт) 9:40
Откуда: Средняя полоса

Сообщение Роман-вб » 21.04.2006 (Пт) 18:05

Steel
Не надо тебе Format
Жить ещё 2 недели, работы на 8 лет, но я докажу на деле, на что способен аскет!

Steel
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 21.04.2006 (Пт) 17:06

Сообщение Steel » 21.04.2006 (Пт) 18:17

Спасибо, время нашли. А как теперь сделать таймер?
И у меня при нажатии на кнопку меняется на стоп, тоесть при втором нажатии должна быть другая команда. Как так сделать?

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 21.04.2006 (Пт) 18:19

Код: Выделить всё
Option Explicit

'api
Private Const SM_CXFRAME As Long = 32
Private Const SM_CYCAPTION As Long = 4
Private Const SM_CYFRAME As Long = 33
Private Declare Function GetSystemMetrics Lib "user32.dll" (ByVal nIndex As Long) As Long

'private
Private TARIFF As Single
Private nSeconds As Long

'controls
Dim WithEvents lblTime As Label
Dim WithEvents timTimer As Timer
Dim WithEvents cmdStart As CommandButton
Dim WithEvents cmdStop As CommandButton

Private Sub Form_Load()
    'dynamically generate user interface
    Set lblTime = Me.Controls.Add("VB.Label", "lblTime")
    lblTime.Visible = True
    lblTime.Caption = "00:00:00"
    lblTime.AutoSize = True
    Set timTimer = Me.Controls.Add("VB.Timer", "timTimer")
    Set cmdStart = Me.Controls.Add("VB.CommandButton", "cmdStart")
    Set cmdStop = Me.Controls.Add("VB.CommandButton", "cmdStop")
    cmdStart.Visible = True
    cmdStop.Visible = False
    cmdStart.Top = lblTime.Top + lblTime.Height + 10
    cmdStop.Top = cmdStart.Top
    cmdStop.Left = cmdStart.Left
    cmdStop.Caption = "Stop"
    cmdStart.Caption = "Start"
    Me.Width = cmdStop.Left + cmdStop.Width + _
    2 * GetSystemMetrics(SM_CXFRAME) * Screen.TwipsPerPixelX
    Me.Height = cmdStop.Top + cmdStop.Height + _
    (GetSystemMetrics(SM_CYCAPTION) + 2 * _
    GetSystemMetrics(SM_CYFRAME)) * Screen.TwipsPerPixelY
    Me.Caption = "Demo"
    timTimer.Enabled = False
    timTimer.Interval = 1000
End Sub

'event handlers
Private Sub cmdStart_Click()
    TARIFF = InputBox("Enter tariff value:", _
    "Extremely Difficult Application", 2.5)
    cmdStart.Visible = False
    cmdStop.Visible = True
    timTimer.Enabled = True
    timTimer_Timer
End Sub

Private Sub cmdStop_Click()
    timTimer.Enabled = False
    cmdStart.Visible = True
    cmdStop.Visible = False
    MsgBox "You spent $" & Format(nSeconds * TARIFF, _
    "##.##") & " on answering stupid questions on VBStreets Forum."
    nSeconds = 0
End Sub

Private Sub timTimer_Timer()
    Dim pSeconds As Long, pMinutes As Long, pHours As Long
    nSeconds = nSeconds + 1
    If nSeconds < 60 Then
        pSeconds = nSeconds
    Else
        pMinutes = nSeconds \ 60
        If pMinutes < 60 Then
            pSeconds = nSeconds Mod 60
        Else
            pHours = nSeconds \ 3600
            pMinutes = pMinutes Mod 60
            pSeconds = nSeconds Mod 60
        End If
    End If
    lblTime.Caption = Format(pHours, "00") & ":" & _
    Format(pMinutes, "00") & ":" & Format(pSeconds, "00")
End Sub


Если разберешься в этом коде, создать и более сложные приложения для тебя не составит труда. Удачи!
Моду создают модоки, а распространяют модозвоны.

Роман-вб
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 520
Зарегистрирован: 04.04.2006 (Вт) 9:40
Откуда: Средняя полоса

Сообщение Роман-вб » 21.04.2006 (Пт) 18:27

Steel
Логической переменной воспользуйся. И проверяй её в событии своей кнопки if...else
Жить ещё 2 недели, работы на 8 лет, но я докажу на деле, на что способен аскет!

Steel
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 21.04.2006 (Пт) 17:06

Сообщение Steel » 21.04.2006 (Пт) 18:29

hCORe писал(а):
Код: Выделить всё
Option Explicit

'api
Private Const SM_CXFRAME As Long = 32
Private Const SM_CYCAPTION As Long = 4
Private Const SM_CYFRAME As Long = 33
Private Declare Function GetSystemMetrics Lib "user32.dll" (ByVal nIndex As Long) As Long

'private
Private TARIFF As Single
Private nSeconds As Long

'controls
Dim WithEvents lblTime As Label
Dim WithEvents timTimer As Timer
Dim WithEvents cmdStart As CommandButton
Dim WithEvents cmdStop As CommandButton

Private Sub Form_Load()
    'dynamically generate user interface
    Set lblTime = Me.Controls.Add("VB.Label", "lblTime")
    lblTime.Visible = True
    lblTime.Caption = "00:00:00"
    lblTime.AutoSize = True
    Set timTimer = Me.Controls.Add("VB.Timer", "timTimer")
    Set cmdStart = Me.Controls.Add("VB.CommandButton", "cmdStart")
    Set cmdStop = Me.Controls.Add("VB.CommandButton", "cmdStop")
    cmdStart.Visible = True
    cmdStop.Visible = False
    cmdStart.Top = lblTime.Top + lblTime.Height + 10
    cmdStop.Top = cmdStart.Top
    cmdStop.Left = cmdStart.Left
    cmdStop.Caption = "Stop"
    cmdStart.Caption = "Start"
    Me.Width = cmdStop.Left + cmdStop.Width + _
    2 * GetSystemMetrics(SM_CXFRAME) * Screen.TwipsPerPixelX
    Me.Height = cmdStop.Top + cmdStop.Height + _
    (GetSystemMetrics(SM_CYCAPTION) + 2 * _
    GetSystemMetrics(SM_CYFRAME)) * Screen.TwipsPerPixelY
    Me.Caption = "Demo"
    timTimer.Enabled = False
    timTimer.Interval = 1000
End Sub

'event handlers
Private Sub cmdStart_Click()
    TARIFF = InputBox("Enter tariff value:", _
    "Extremely Difficult Application", 2.5)
    cmdStart.Visible = False
    cmdStop.Visible = True
    timTimer.Enabled = True
    timTimer_Timer
End Sub

Private Sub cmdStop_Click()
    timTimer.Enabled = False
    cmdStart.Visible = True
    cmdStop.Visible = False
    MsgBox "You spent $" & Format(nSeconds * TARIFF, _
    "##.##") & " on answering stupid questions on VBStreets Forum."
    nSeconds = 0
End Sub

Private Sub timTimer_Timer()
    Dim pSeconds As Long, pMinutes As Long, pHours As Long
    nSeconds = nSeconds + 1
    If nSeconds < 60 Then
        pSeconds = nSeconds
    Else
        pMinutes = nSeconds \ 60
        If pMinutes < 60 Then
            pSeconds = nSeconds Mod 60
        Else
            pHours = nSeconds \ 3600
            pMinutes = pMinutes Mod 60
            pSeconds = nSeconds Mod 60
        End If
    End If
    lblTime.Caption = Format(pHours, "00") & ":" & _
    Format(pMinutes, "00") & ":" & Format(pSeconds, "00")
End Sub


Если разберешься в этом коде, создать и более сложные приложения для тебя не составит труда. Удачи!


Спасибо за помощь. Многое понятно, но все же остались темные моменты.

Роман-вб
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 520
Зарегистрирован: 04.04.2006 (Вт) 9:40
Откуда: Средняя полоса

Сообщение Роман-вб » 21.04.2006 (Пт) 18:31

hCORe
Слишком сложно :wink:
Жить ещё 2 недели, работы на 8 лет, но я докажу на деле, на что способен аскет!

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 21.04.2006 (Пт) 18:31

Никаких проблем. Спрашивай.
Моду создают модоки, а распространяют модозвоны.

Роман-вб
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 520
Зарегистрирован: 04.04.2006 (Вт) 9:40
Откуда: Средняя полоса

Сообщение Роман-вб » 21.04.2006 (Пт) 18:32

Steel
Продолжи то, что начал.
Жить ещё 2 недели, работы на 8 лет, но я докажу на деле, на что способен аскет!

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 21.04.2006 (Пт) 18:44

Steel писал(а):
!Viper! писал(а):Воспользоваться функцией Format например

Где можно посмотреть примеры функций?

В справке. :-)
Format$(now, "(ddd) dd.mmm.yyyy hh.nn.ss")
Вложения
UserTimer.zip
Вот проект, в котором реализовано примерно то, что ты хочешь сделать.
(1.86 Кб) Скачиваний: 26
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

Steel
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 21.04.2006 (Пт) 17:06

Сообщение Steel » 21.04.2006 (Пт) 18:58

Код: Выделить всё
Private Sub Start_Click()
    Start.Visible = False
    Stop.Visible = True
    Time.Text = Time$
End Sub

Private Sub Stop_Click()
    Start.Visible = True
    Stop.Visible = False
End Sub

Private Sub Timer1_Timer()
    Time.Text = Time$
End Sub

Почему этот код не пашет?

Роман-вб
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 520
Зарегистрирован: 04.04.2006 (Вт) 9:40
Откуда: Средняя полоса

Сообщение Роман-вб » 21.04.2006 (Пт) 19:01

Steel
Ну как можно писать Stop.Visible. Stop -- это команда, Time -- функция!
Жить ещё 2 недели, работы на 8 лет, но я докажу на деле, на что способен аскет!

Роман-вб
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 520
Зарегистрирован: 04.04.2006 (Вт) 9:40
Откуда: Средняя полоса

Сообщение Роман-вб » 21.04.2006 (Пт) 19:04

Код: Выделить всё
Private Sub cmdStart_Click()
    cmdStart.Visible = False
    cmdStop.Visible = True
    txtTime.Text = Time$
End Sub

Private Sub cmdStop_Click()
    cmdStart.Visible = True
    cmdStop.Visible = False
    Timer1.Enabled = False
End Sub

Private Sub Timer1_Timer()
    txtTime.Text = Time$
End Sub
Жить ещё 2 недели, работы на 8 лет, но я докажу на деле, на что способен аскет!

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 21.04.2006 (Пт) 19:06

Роман-вб писал(а):Steel
Ну как можно писать Stop.Visible.

Не надо называть контролы Stop. Будут проблемы ибо Stop - отладочный оператор, который в IDE тормозит прогу, а в exe аналогичен End
Изображение

Роман-вб
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 520
Зарегистрирован: 04.04.2006 (Вт) 9:40
Откуда: Средняя полоса

Сообщение Роман-вб » 21.04.2006 (Пт) 19:10

keks-n
В любом случай не стоит называть идентификаторы зарезервированными словами и именами встроенных функций.
Жить ещё 2 недели, работы на 8 лет, но я докажу на деле, на что способен аскет!

Steel
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 21.04.2006 (Пт) 17:06

Сообщение Steel » 22.04.2006 (Сб) 10:58

Код: Выделить всё
Private Sub Form_Load()
    proStart.Enabled = True
    proStop.Enabled = False
End Sub

Private Sub proStart_Click()
    StartTime = Time
    PriceBegin = "Введите цену сеанса:"
    proPrice = InputBox(PriceBegin, "Цена сеанса")
    proTimer.Enabled = True
    proStart.Enabled = False
    proStop.Enabled = True
    UserTariff = Val(proTime.Caption)
End Sub

Private Sub proStop_Click()
    StopTime = Time
    proTimer.Enabled = False
    MsgBox "Клиент должен: (здесь должно показывать скока клиент должен) руб.", , "Kompas"
    proStart.Enabled = True
    proStop.Enabled = False
    proTime.Caption = "Сеанс окончен."
End Sub

Private Sub proTimer_Timer()
    proTime.Caption = Format$(proPrice - StartTime, "hh:nn:ss")
End Sub

Function GetMoney(ByVal UserTime As Date, ByVal UserTarif As Currency) As Currency
     GetMoney = ((Hour(UserTime) * 60) + Minute(UserTime)) + (Second(UserTime) / 60) * (UserTarif / 60)
End Function

Почему после нажатия на кнопку таймер не идет? И как вывести скока должен клиент?

Роман-вб
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 520
Зарегистрирован: 04.04.2006 (Вт) 9:40
Откуда: Средняя полоса

Сообщение Роман-вб » 22.04.2006 (Сб) 11:10

Steel
Почему после нажатия на кнопку таймер не идет? И как вывести скока должен клиент?
НА какую кнопку? Из твоего кода сложно понять где у тебя кнопка, а где нет. Имя "кнопки" принято начинать с cmd (или btn).
Скажи, что делает вот это:
Код: Выделить всё
Private Sub proTimer_Timer()
    proTime.Caption = Format$(proPrice - StartTime, "hh:nn:ss")
End Sub
Жить ещё 2 недели, работы на 8 лет, но я докажу на деле, на что способен аскет!

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 22.04.2006 (Сб) 11:13

жуткий код...
Весь мир матрица, а мы в нем потоки байтов!

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 22.04.2006 (Сб) 11:20

Steel писал(а):
Код: Выделить всё
Private Sub Form_Load()
    proStart.Enabled = True
   =============================
Function GetMoney(ByVal UserTime As Date, ByVal UserTarif As Currency) As Currency
     GetMoney = ((Hour(UserTime) * 60) + Minute(UserTime)) + (Second(UserTime) / 60) * (UserTarif / 60)
End Function

Почему после нажатия на кнопку таймер не идет? И как вывести скока должен клиент?

Тебе с коммерариями расписать мой проект, который я тебе кидал?
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 22.04.2006 (Сб) 11:26

где кнопки? где таймеры? где объявления переменных? Каша какая то в коде...

Выложили ведь рабочий пример...
Весь мир матрица, а мы в нем потоки байтов!

Роман-вб
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 520
Зарегистрирован: 04.04.2006 (Вт) 9:40
Откуда: Средняя полоса

Сообщение Роман-вб » 22.04.2006 (Сб) 12:22

На, написано в твоём духе:
Вложения
T.zip
(1.49 Кб) Скачиваний: 23
Жить ещё 2 недели, работы на 8 лет, но я докажу на деле, на что способен аскет!

Роман-вб
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 520
Зарегистрирован: 04.04.2006 (Вт) 9:40
Откуда: Средняя полоса

Сообщение Роман-вб » 22.04.2006 (Сб) 12:36

только там в функции добавь в конце Abs преед скобками (где значение возвращается) :!:
Жить ещё 2 недели, работы на 8 лет, но я докажу на деле, на что способен аскет!

След.

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

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

Сейчас этот форум просматривают: AhrefsBot, Google-бот и гости: 187

    TopList