On-line: Andrey, Pasha, SergKis, гостей 0. Всего: 3 [подробнее..]
АвторСообщение
постоянный участник




Пост N: 7043
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.09.21 08:16. Заголовок: Работа со временем в МиниГуи


В МиниГуи есть хороший объект DATEPICKER.
А похожий объект есть для работы с Датой+Время ?
Типа такого - datetimepicker ?


Или хотя бы объект для времени есть ?

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 25 , стр: 1 2 All [только новые]


администратор




Пост N: 1763
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 10.09.21 08:22. Заголовок: Andrey пишет: А пох..


Andrey пишет:

 цитата:
А похожий объект есть для работы с Датой+Время ?
Типа такого - datetimepicker ?

Вроде нет, лепил из двух контролов бутерброд для этого. Согласен что необходимость назрела

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7044
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.09.21 08:49. Заголовок: Haz пишет: Вроде не..


Haz пишет:

 цитата:
Вроде нет, лепил из двух контролов бутерброд для этого.


А картинку покажи как у тебя получилось ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1765
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 10.09.21 09:17. Заголовок: Andrey пишет: А кар..


Andrey пишет:

 цитата:
А картинку покажи как у тебя получилось ?



слева до входа в режим редактирования, справа во время редакции. Переход между контролами по tab

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7045
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.09.21 09:35. Заголовок: Понял. Спасибо ! :s..


Понял. Спасибо !

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7046
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.09.21 10:43. Заголовок: Сделал заготовку для..


Сделал заготовку для создания строки фильтра.
Скрытый текст

Возникли вопросы по вводу:
1) Как сделать по центру вертикально GETBOX Time_1 и Time_2 ?
Почему то прижато к верхнему краю, некрасиво выглядит.

2) Как сделать ввод времени правильно ?
Т.е. как в GETBOX проверять ввод до значений 23:59:59 ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1695
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 10.09.21 21:18. Заголовок: Andrey пишет: Возни..


Andrey пишет:

 цитата:
Возникли вопросы по вводу



У Вас тема называется "Работа со временем в МиниГуи".
Так вот, для времени в МиниГуи есть хороший объект элемент управления TIMEPICKER и пример есть соответствующий.

Изучите, может и вопросы одни отпадут, а другие появятся..

Спасибо: 1 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7047
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.09.21 21:39. Заголовок: Петр пишет: для вре..


Петр пишет:

 цитата:
для времени в МиниГуи есть хороший объект элемент управления TIMEPICKER


Спасибо большое !
А то мой поиск Far'ом по примерам "datetime" не дал этого элемента.
А я тут велосипед изобретаю...

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7443
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 10.09.21 21:56. Заголовок: Andrey пишет: А то ..


Andrey пишет:

 цитата:
А то мой поиск Far'ом по примерам "datetime" не дал этого элемента.


Это смотря как искать
А как же вот такой ?
C:\MiniGUI\SAMPLES\BASIC\datetime\
Там живет TIMEPICKER

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7048
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.09.21 22:33. Заголовок: Dima пишет: Это смо..


Dima пишет:

 цитата:
Это смотря как искать


Поиск по содержимому файлов *.prg, строка поиска - "datetime"

Вот и не нашёл сходу.
Из-за этого и написал здесь, есть ли такой компонент.
Начал свой компонент - время делать через GETBOX...
Изобретать свой велосипед.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1699
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 11.09.21 19:30. Заголовок: Andrey пишет: Сдела..


Andrey пишет:

 цитата:
Сделал заготовку для создания строки фильтра.



С TIMEPICKER заготовка, м.б., выглядела бы так

Скрытый текст


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3876
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 11.09.21 23:05. Заголовок: Петр Можно ли в TIM..


Петр
Можно ли в TIMEPCKER из примера сбросить сразу все значения в 0, типа очистить поле, а в представленном варианте DATAPICKER вызвать MONTHCALENDAR или очистить значения - пустая дата, т.е. за все периоды по дате запрос, могу не знать, какие даты в базе есть ? Не праздный вопрос, еще ~ 2012 году клиенты плевались от этих контролов, пришлось заменить их на GETBOX-ы, с тех пор не использую их

PS
Вопрос с MONTHCALENDAR отпал, нашелся вызов и клавиша F4

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7051
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.09.21 23:21. Заголовок: Петр пишет: С TIMEP..


Петр пишет:

 цитата:
С TIMEPICKER заготовка, м.б., выглядела бы так


Спасибо БОЛЬШОЕ !

SergKis пишет:

 цитата:
Не праздный вопрос, еще ~ 2012 году клиенты плевались от этих контролов, пришлось заменить их на GETBOX-ы, с тех пор не использую их


Да, управление этого элемента фиговая.
Но у меня юзера ооочень редко будут это использовать, сделал это скорее для себя на всякий случай.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1700
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 12.09.21 10:30. Заголовок: SergKis пишет: Можн..


SergKis пишет:

 цитата:
Можно ли в TIMEPCKER из примера сбросить сразу все значения в 0, типа очистить поле


Да, можно сразу указать свойство VALUE "00:00:00".
Можно программно сбросить - Form_1.Time_2.Value := "00:00:00" или так SetTimePick( Form_1.Time_1.Handle, 0, 0, 0 )

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3877
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 12.09.21 10:52. Заголовок: Петр пишет Можно про..


Петр пишет
 цитата:
Можно программно сбросить - Form_1.Time_2.Value := "00:00:00" или так SetTimePick( Form_1.Time_1.Handle, 0, 0, 0 )


Это да, но требуется контрол, с которого придет такая команда. Если TIMEPICKER исп. в ячейке TsBrowse, то получается только руками, пройдя по всем элементам. С GetBox почти так же, но чуть проще (правда есть блок на VALID)
 
@ y, x2 GETBOX Time_1 OBJ oGet VALUE space(6) WIDTH nWTime HEIGHT nFSize*3 ;
PICTURE "@R 99:99:99" VALID {|og| bValid( og ) } ;
ON GOTFOCUS {|| SendMessage(This.Handle, 177 /*EM_SETSEL*/, 0, Len( This.Value )) } ;
ON INIT {|| _SetAlign ( This.Name, ThisWindow.Name, "CENTER" ) }
...
* ----------------------------------------------------------------------------------- *
STATIC FUNCTION bValid( oGet ) // проверка правильности времени в GetBox
* ----------------------------------------------------------------------------------- *
LOCAL lRet, lVl1, lVl2, lVl3, nVal
LOCAL cVal := oGet:VarGet()

lVl1 := lVl2 := lVl3 := .F.

nVal := Val(left(cVal, 2))
IF nVal >= 0 .and. nVal < 24 ; lVl1 := .T.
ENDIF
nVal := Val(subs(cVal, 3, 2))
IF nVal >= 0 .and. nVal < 60 ; lVl2 := .T.
ENDIF
nVal := Val(subs(cVal, 5, 2))
IF nVal >= 0 .and. nVal < 60 ; lVl3 := .T.
ENDIF

lRet := lVl1 .and. lVl2 .and. lVl3

RETURN lRet

bValid() можно усиливать, если надо, до управления кареткой
cTime := left(trim(This.Time_1.Value)+repl('0',6), 6)
позволяет вводить в такой getbox только левую часть времени, например 10 => 100000

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1701
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 12.09.21 13:57. Заголовок: SergKis пишет: Это ..


SergKis пишет:

 цитата:
Это да, но требуется контрол, с которого придет такая команда. Если TIMEPICKER исп. в ячейке TsBrowse, то получается только руками, пройдя по всем элементам.


TIMEPICKER, как и DATEPICKER, построен на стандартном для Windows элементе управления DTP (date and time picker), соответственно и поведение его предопределено возможностями DTP. Если он не устраивает - какие проблемы, ищем адекватную замену.
Но вот для заготовки Андрея (и не только) его возможностей, ИМХО, хватает.

Еще один вариант
Скрытый текст



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1702
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 12.09.21 14:25. Заголовок: Петр пишет: Еще оди..


Петр пишет:

 цитата:
Еще один вариант


Что здесь можно улучшить (лень )

1) UI
2) Нормализация dDate1 и dDate2 (dDate1 < dDate2)
3) RANGE (RANGEMIN, RANGEMAX)
например
Form_1.Date_1.RangeMin := DBORDERINFO(DBOI_SCOPETOP)
Form_1.Date_2.RangeMax := DBORDERINFO(DBOI_SCOPEBOTTOM)

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1703
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 12.09.21 19:09. Заголовок: Еще один вариант AN..


Еще один вариант

Скрытый текст


Базируется на возможностях DATEPICKER.
В связи с ограничениями, накладываемыми существующими встроенными MiniGUI функциями,
добавлены несколько новых C-level функций.

Enjoy

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7052
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.09.21 19:29. Заголовок: Петр пишет: Еще оди..


Петр пишет:

 цитата:
Еще один вариант


Отличный вариант !
А как можно сделать доп.кнопку для смены времени на 00:00:00 ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7053
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.09.21 20:23. Заголовок: Вот заготовка ! /* ..


Вот заготовка !
Скрытый текст


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1704
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 12.09.21 21:21. Заголовок: Andrey пишет: А как..


Andrey пишет:

 цитата:
А как можно сделать доп.кнопку для смены времени на 00:00:00 ?



Как-то так


 цитата:
Procedure dtp_ChangeTimePart(nHandle, nHour, nMinute, nSecond) 
Local tDateTime, dDate

hb_defaultValue(@nHour, 0)
hb_defaultValue(@nMinute, 0)
hb_defaultValue(@nSecond, 0)

IF dtp_IsChecked(nHandle)
tDateTime := dtp_GetDT(nHandle)
dDate := hb_TToD(tDateTime)
ELSE
dDate := Date()
ENDIF

tDateTime := hb_DateTime(Year(dDate), Month(dDate), Day(dDate), nHour, nMinute, nSecond)

Return dtp_SetDT(nHandle, tDateTime)



ACTION (dtp_ChangeTimePart(Form_1.Date_1.Handle, 0, 0, 0))
или
ACTION (dtp_ChangeTimePart(Form_1.Date_1.Handle))

ACTION (dtp_ChangeTimePart(Form_1.Date_1.Handle, 23, 59, 59))

P.S. Если нужно задавать время в виде строки "hh:mm:ss" (иногда удобно) делайте функцию-обертку для dtp_ChangeTimePart
с парсингом и валидацией.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 25 , стр: 1 2 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 306
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет