Перейти к содержимому
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

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

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


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

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

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

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

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


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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

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

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

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

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

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


×
×
  • Создать...