Miroshka 5 Опубликовано: 29 октября, 2017 Приветули. Ищу функцию часов (на готовом гуи плез), что бы можно поместить на гуи. В идеале взять время МСК, но в крайнем случае сойдёт и время самого майна(нет) Спасибо Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Doob 2 749 Опубликовано: 30 октября, 2017 Делается это точно так же, как и без гуи, только с гуи. В качестве гуи взял forms: local component, uptime, internet = require('component'), require('computer').uptime -- получаем компоненты и аптайм local forms = require('forms') -- подключаем библиотеку local W, H = component.gpu.getResolution() -- получаем размер экрана if component.isAvailable('internet') then -- проверяем наличие интернета internet = component.internet else error('No internet card available.', 0) end if not internet.isHttpEnabled() then -- проверяем доступ по http error('HTTP is disabled.', 0) end local args, tz = {...}, 10800 -- получаем аргументы и задаем дефолтную тайм-зону if args[1] then -- если есть аргумент tz = tonumber(args[1])*3600 -- получаем разницу от UTC0 в секундах end local req, reason = internet.request('https://time100.ru/api.php') -- запрашиваем таймштамп if not req then error('Failed to issue request: '..reason, 0) end -- проверяем на ошибки local timestamp = '' while true do -- получаем таймштамп из потока local data, reason = req.read() if not data then req.close() if reason then error(reason, 0) end break end timestamp = timestamp..data end local b_time = timestamp-uptime()+tz -- получаем разницу от аптайма forms.ignoreAll() -- чистка листенеров local main = forms.addForm() -- создаем форму main.W = 20 -- ширина и main.H = 6 -- высота главного окна main.left = (W-main.W)/2 -- размещаем окно по центру экрана main.top = (H-main.H)/2 main.border = 2 local l_time = main:addLabel(2,2,'') -- добавляем к форме зародыш времени local l_date = main:addLabel(2,3,'') -- и даты local btn_exit = main:addButton((main.W-7)/2,5,'exit', forms.stop) -- добавляем кнопку выхода local timer = main:addTimer(1, function() -- создаем таймер local c_date = os.date('*t', b_time+uptime()) -- получаем время из текущего таймштампа l_time.caption = ('time: '..c_date.hour..':'..c_date.min..':'..c_date.sec) -- задаем текст с текущим временем l_date.caption = ('date: '..c_date.day..'/'..c_date.month..'/'..c_date.year) -- задаем текст с датой l_time.W = #l_time.caption -- получем длину текста времени l_date.W = #l_date.caption -- и даты l_time.left = (main.W-l_time.W)/2+1 -- размещаем по центру окна l_date.left = (main.W-l_date.W)/2+1 main:redraw() -- перерисовываем end) timer:run() -- запускаем таймер forms.run(main) -- запускаем окно 3 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Zer0Galaxy 2 187 Опубликовано: 30 октября, 2017 В самом деле, чего может быть проще? Вот только всякий раз размещать надписи по центру окна нет необходимости. Теперь у надписи есть свойство l_time.centered=true l_date.centered=true которое автоматически отцентрирует строку. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Doob 2 749 Опубликовано: 30 октября, 2017 Теперь у надписи есть свойство которое автоматически отцентрирует строку. Вот, давно бы так, чтоб все как у людей. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах