powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / А можно DateTimePicker использовать нестандартно? Например для ввода интервала времени.
2 сообщений из 2, страница 1 из 1
А можно DateTimePicker использовать нестандартно? Например для ввода интервала времени.
    #38206101
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. например в переменной хранятся секунды .
Но хочу отображать их по человечески, т.е. h:mm:ss.

Пример: процесс должен происходить следующий раз через случайное время (случайный интервал задан границами)

Пример кода (тупого для иллюстрации идеи):
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
    Dim lowerbound As Integer
    Dim upperbound As Integer
    'ждать в течении
    lowerbound = Val(TextIntervalFrom.Text) * 60
    upperbound = Val(TextIntervalTo.Text) * 60
    Randomize
    LabelCallTime.Caption = DateAdd("s", Int((upperbound - lowerbound + 1) * Rnd + lowerbound), Now)



В данном примере, если например ввести
TextIntervalFrom.Text=10
TextIntervalTo.Text=20,
то код рассчитает случайную дельту (в секундах) между 10-ю минутами и 20-ю минутами
прибавит этот интервал к тек. времени и получим время след. события

Если допустим 10/20 минут,
то для отображения/ввода могу использовать UpDown где пользователь задает грубо минуты.

Но код то работает с секундами, т.е. способен на большее.

Но если надо например задать интервал между 10 и 30 секундами
Или скажем между 2-мя и 3-мя часами.
Т.е. желательно форматировать текст в
0 h 20 min 00 sec
2 h 10 min 00 sec
0 h 01 min 30 sec
Сутки наверно не нужны (можно ограничить 24 ч),
хотя для общности возможность
47 h 00 min 00 sec
не повредит

Высчитывать минуты, часы и секунды самому -да еще чтоб можно было их красиво менять в контроле - умучаешься.

Если дело -дрянь, то оставлю минуты (напр. 0-9999) +UpDown и иже с ним.

Но все же м.б. можно ли приспособить DTPicker под это дело ?
(интеллектуально работать с переменной, содержащей число секунд)
...
Рейтинг: 0 / 0
А можно DateTimePicker использовать нестандартно? Например для ввода интервала времени.
    #38206158
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, поигрался пока с VB-шным DTPicker из Control6.

Если задать:
Format: 3-dtpCustom
Custom Format: H 'h' mm' min 'ss' sec'
UpDown: true

Ну еще, эта сволочь ненужную мне дату хранит, поэтому границы даты надо установить максимально за границами разумного
MinDate: 01.01.1601
MinDate: 31.12.9999

+тупой хитрый код

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Private Sub CommandGetSec_Click()
  TextSec.Text = Hour(DTPicker1.Value) * 3600 + Minute(DTPicker1.Value) * 60 + Second(DTPicker1.Value)
End Sub

Private Sub CommandSetSec_Click()
  Dim MyTime As Date
  MyTime = TimeFromSeconds(CLng(Val(TextSec.Text)))
  DTPicker1.Value = MyTime
End Sub

Private Function TimeFromSeconds(the_sec As Long) As Date
  Dim s_hour As Long
  Dim s_min As Long
  Dim s_sec As Long
  
  s_hour = the_sec \ 3600 '3600sec
  s_min = (the_sec Mod 3600) \ 60 '60sec
  s_sec = (the_sec Mod 60)
  
  'Можно конечно TimeSerial(0, 0, the_sec), но это не будет работать при выходе за пределы Integer
  '23:59:59 == 86399 sec
  
  TimeFromSeconds = TimeSerial(s_hour, s_min, s_sec)
End Function



Тогда по идее будет именно то что я хочу, единственное
Дмитрий77хотя для общности возможность
47 h 00 min 00 sec
не повредит
- от этого придется отказаться, т.е. ограничить выбор числом
86399 as Long [sec] == 23:59:59

Интересно через API (vb-шный контрол все одно бесполезен из-за стилей и т.п.) можно улучшить идеологию?
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / А можно DateTimePicker использовать нестандартно? Например для ввода интервала времени.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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