Форум » [x]Harbour » Есть ли такой шаблон GET ? » Ответить

Есть ли такой шаблон GET ?

Dima: Часы:минуты PS До кучи. Если я верно понял ADS не поймет поле типа TIME из Harbour или это не так ? Похоже на то -> Available only in ADT tables а у меня DBF

Ответов - 10

Pasha: В харборе есть тип данных datetime Пример: Local dd := Date() Local dt := hb_DateTime() @ 1,0 get dd @ 2,0 get dt read Вроде бы в src\rtl\tget.prg отрабатывается шаблон "@T", но что-то он не дает эффекта. А что касается dbf, в харборе тоже поддерживается расширенный тип данных datetime. Впрочем, возможно, сам ads не поддерживает datetime в dbf

Pasha: Dima пишет: Похоже на то -> Available only in ADT tables а у меня DBF Да, похоже. Advantage Data Architect для dbf при добавлении поля не содержит типа данных DateTime

Dima: Pasha пишет: Local dd := Date() Local dt := hb_DateTime() @ 1,0 get dd @ 2,0 get dt read Да вот так работает @ 2,0 get dt Picture "@T" во всяком случае контролируется не верный ввод


Dima: Dima пишет: Да вот так работает @ 2,0 get dt Picture "@T" во всяком случае контролируется не верный ввод Поспешил я с выводом......не работает как надо

Sergy: У меня есть функция, которая позволяет создавать ЛЮБЫЕ формы ввода, используя стандартный механизм @ ... SAY ... GET - без использования объектов в теле программы. Все что требуется - добавить функцию-обработчик, например: @ 1,2 SAY "Клиент" GET nClient VIA ClientTrap WHEN... VALID... // выпадающий список клиентов с поиском @ 1,3 SAY "Автомобиль" GET nCar VIA CarTrap WHEN... VALID // выпадающий список машин @ 1,4 SAY "Грузовик" GET lCargo PICT "Y" // будет реализован чек-бокс [v] READ Требования к функциям ClientTrap, CarTrap: 1) сформировать строку с "изображеннием" переменной (например по номеру клиента - его название) 2) осуществить проверку правильности переменной 3) осуществить ввод данных - хоть через DBEDIT(), хоть через ACHOICE() - вот реализация выпадающего списка с привязкой к ROW(),COL() текущего GET поля 4) процедура получает координаты ROW(),COL() текущего GET поля, актуальную переменную в нем и команду, что именно от нее требуется: проверка правильности, вывод значения в строку (для SAY) или работу с юзером. Таким образом - если реализовать краткую процедуру ввода времени с проверкой вводимых данных - ее можно будет привязать к любому GET.

Dima: Sergy пишет: Таким образом - если реализовать краткую процедуру ввода времени с проверкой вводимых данных Предложи корректный VALID [pre2] proc main Local Ntime:=0 cls @ 10,10 get Ntime Picture "@R 99:99" Valid Test(@Ntime) Read return ****************** Func Test(Ntime) local ret:=.t. local ctime local lenctime:=len(alltrim(str(Ntime,4))) do while .t. if Ntime<0 ret:=.f. exit endif if lenctime==2 Ntime*=100 elseif lenctime==1 Ntime*=1000 endif ctime:=str(Ntime,4) if val(left(ctime,2))>23 ret:=.f. exit endif if val(right(ctime,2))>59 ret:=.f. exit endif exit enddo return ret [/pre2]

Sergy: Dima пишет: Предложи корректный VALID Пока не проверял (пишу с компа без клиппера), но идея должна быть понятна: @ 1,2 SAY "Время" GET cTime PICT "##:##" VALID TIMETOSEC(cTime) > 0

Dima: Sergy пишет: TIMETOSEC Меня тоже только что посетила такая мысль

Andrey_IV: VALID TIMETOSEC(cTime) > 0 А можно и так: #define VALID_TIME(cTime) ((VAL(SUBSTR(cTime, 1, 2)) >= 0 .AND. VAL(SUBSTR(cTime, 1, 2)) < 24) .AND.; (VAL(SUBSTR(cTime, 3, 2)) >= 0 .AND. VAL(SUBSTR(cTime, 3, 2)) < 60)) @ 1,2 SAY "Время" GET cTime PICT "##:##" VALID VALID_TIME(cTime)

Andrey_IV: Конечно не VAL(SUBSTR(cTime, 3, 2)), а VAL(SUBSTR(cTime, 4, 2)) и шаблон лучше не "##:##", а "99:99" #define VALID_TIME(cTime) ((VAL(SUBSTR(cTime, 1, 2)) >= 0 .AND. VAL(SUBSTR(cTime, 1, 2)) < 24) .AND.; (VAL(SUBSTR(cTime, 4, 2)) >= 0 .AND. VAL(SUBSTR(cTime, 4, 2)) < 60)) @ 1,2 SAY "Время" GET cTime PICT "99:99" VALID VALID_TIME(cTime)



полная версия страницы