Перейти к публикации
Miroshka

Время в гуи

Рекомендованные сообщения

Приветули. Ищу функцию часов (на готовом гуи плез), что бы можно поместить на гуи. В идеале взять время МСК, но в крайнем случае сойдёт и время самого майна(нет)

 

Спасибо ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Делается это точно так же, как и без гуи, только с гуи.

В качестве гуи взял 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) -- запускаем окно

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В самом деле, чего может быть проще?  :wacko2:

Вот только всякий раз размещать надписи по центру окна нет необходимости.

Теперь у надписи есть свойство

l_time.centered=true
l_date.centered=true

которое  автоматически отцентрирует строку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Теперь у надписи есть свойство

которое  автоматически отцентрирует строку.

Вот, давно бы так, чтоб все как у людей.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.


×