Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
|
lm2:ce:timer [2020/08/05 19:30] ruben |
lm2:ce:timer [2020/11/30 14:12] (текущий) |
||
|---|---|---|---|
| Строка 31: | Строка 31: | ||
| </ | </ | ||
| + | |||
| + | ---- | ||
| Создадим проект, | Создадим проект, | ||
| - | * [[https:// | + | * {{:lm2:ce: |
| - | * [[https:// | + | * {{:lm2:ce: |
| + | ==== Создание структуры директорий ==== | ||
| - | ---- | + | Создайте папку empty_project. Это корень проекта. Скопируйте в корень исполняемый модуль (исполняемый файл .exe и динамические библиотеки .dll необходимые для старта платформы в случае Windows или скомпилированный бинарный файл в случаях систем на основе ядра Linux). |
| - | ===== Пример | + | Создайте в корне папку images. Это каталог для хранения |
| - | Функции для работы с таймером находятся в файле **timer.lua**: | + | Создайте в корне папку configs. Это каталог для хранения |
| + | |||
| + | Создайте в корне папку fonts. Это каталог | ||
| + | |||
| + | ==== Создание файлов ==== | ||
| + | |||
| + | **Главный конфигурационный файл** | ||
| + | |||
| + | Основная статья «[[https:// | ||
| + | |||
| + | <code xml> | ||
| + | <!-- объявление xml --> | ||
| + | <?xml version=" | ||
| + | <!-- корневой элемент --> | ||
| + | < | ||
| + | <!-- элемент общих настроек, задаются следующие: | ||
| + | | ||
| + | < | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | <!-- элемент логической машины, | ||
| + | | ||
| + | | ||
| + | <VM | ||
| + | ID=" | ||
| + | Visual=" | ||
| + | StartupLayout=" | ||
| + | StartupLogic=" | ||
| + | </ | ||
| + | <!-- элемент шрифта, | ||
| + | | ||
| + | <Font ID=" | ||
| + | </ | ||
| + | |||
| + | |||
| + | </ | ||
| + | |||
| + | **Файл конфигурации окон** | ||
| + | |||
| + | Основная статья «[[https:// | ||
| + | |||
| + | <code xml> | ||
| + | <!-- объявление xml --> | ||
| + | <?xml version=" | ||
| + | <!-- корневой элемент, | ||
| + | <root MonitorWidth=" | ||
| + | <!-- элемент вьюпорт, | ||
| + | уникальный идентификатор | ||
| + | < | ||
| + | </ | ||
| + | |||
| + | |||
| + | </ | ||
| + | |||
| + | **Файл описания панелей** | ||
| + | |||
| + | Основная статья «[[https:// | ||
| + | |||
| + | <code xml> | ||
| + | <!-- объявление xml --> | ||
| + | <?xml version=" | ||
| + | <!-- корневой элемент --> | ||
| + | < | ||
| + | <!-- элемент подключающий строковые данные --> | ||
| + | <Text FileName=" | ||
| + | <!-- элемент подключающий библиотеку элементов --> | ||
| + | <Library FileName=" | ||
| + | <!-- элемент родитель панелей --> | ||
| + | < | ||
| + | <!-- элемент описывающий панель, | ||
| + | на который будет выводиться панель | ||
| + | <Panel ID=" | ||
| + | <!-- элемент на панели, | ||
| + | <Entry ID=" | ||
| + | <!-- элемент на панели, | ||
| + | <Entry ID=" | ||
| + | <!-- элемент на панели, | ||
| + | <Entry ID=" | ||
| + | <!-- меняется свойство, | ||
| + | < | ||
| + | </ | ||
| + | <!-- элемент на панели, | ||
| + | <Entry ID=" | ||
| + | <!-- элемент на панели, | ||
| + | <Entry ID=" | ||
| + | <!-- элемент на панели, | ||
| + | <Entry ID=" | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| + | </ | ||
| + | |||
| + | **Файл с библиотекой элементов** | ||
| + | |||
| + | Основная статья «[[https:// | ||
| + | |||
| + | <code xml> | ||
| + | <!-- объявление xml --> | ||
| + | <?xml version=" | ||
| + | <!-- корневой элемент --> | ||
| + | < | ||
| + | <!-- объявление библиотеки --> | ||
| + | < | ||
| + | < | ||
| + | | ||
| + | <Element ID=" | ||
| + | < | ||
| + | <!-- подэлемент прямоугольник, | ||
| + | размеры и положение, | ||
| + | < | ||
| + | </ | ||
| + | <!-- элемент библиотеки, | ||
| + | размеры элемента | ||
| + | <Element ID=" | ||
| + | <!-- подэлемент прямоугольник, | ||
| + | | ||
| + | < | ||
| + | <!-- подэлемент текстовое поле, задаются следующие свойства: | ||
| + | | ||
| + | <TextBox ID=" | ||
| + | </ | ||
| + | <!-- элемент библиотеки, | ||
| + | | ||
| + | <Element ID=" | ||
| + | <!-- подэлемент изображение, | ||
| + | <Image Rect=" | ||
| + | </ | ||
| + | <!-- элемент библиотеки, | ||
| + | | ||
| + | <Element ID=" | ||
| + | < | ||
| + | <!-- подэлемент изображение, | ||
| + | | ||
| + | <Image ID=" | ||
| + | <!-- подэлемент изображение, | ||
| + | | ||
| + | <Image ID=" | ||
| + | <!-- подэлемент изображение, | ||
| + | | ||
| + | <Image ID=" | ||
| + | <!-- подэлемент изображение, | ||
| + | | ||
| + | <Image ID=" | ||
| + | <!-- подэлемент изображение, | ||
| + | | ||
| + | <Image ID=" | ||
| + | <!-- задается свойство | ||
| + | < | ||
| + | < | ||
| + | -- этот код управляет цифрами на таймере | ||
| + | local digits = value | ||
| + | for i = 1, 4 do | ||
| + | local ch = digits: | ||
| + | if ch>= 48 and ch <= 57 then | ||
| + | Set(" | ||
| + | end | ||
| + | end | ||
| + | ]]></ | ||
| + | </ | ||
| + | </ | ||
| + | <!-- элемент библиотеки, | ||
| + | | ||
| + | <Element ID=" | ||
| + | <!-- подэлемент изображение, | ||
| + | | ||
| + | <Image ID=" | ||
| + | <!-- подэлемент изображение, | ||
| + | | ||
| + | <Image ID=" | ||
| + | <!-- задается свойство lua-кодом --> | ||
| + | < | ||
| + | < | ||
| + | if value == " | ||
| + | Set(" | ||
| + | -- состояние горящей лампы | ||
| + | elseif value == " | ||
| + | Set(" | ||
| + | Set(" | ||
| + | Set(" | ||
| + | Set(" | ||
| + | -- состояние выключенной лампы | ||
| + | elseif value == " | ||
| + | Set(" | ||
| + | Set(" | ||
| + | Set(" | ||
| + | Set(" | ||
| + | -- состояние мигающей лампы | ||
| + | elseif value: | ||
| + | local t1, t2 = value: | ||
| + | if t1 == nil then t1 = 1000 end | ||
| + | if t2 == nil then t2 = 1000 end | ||
| + | Set(" | ||
| + | Set(" | ||
| + | local dt1 = 200 + tonumber(t1) | ||
| + | local dt2 = dt1 + 200 | ||
| + | local dt3 = dt2 + tonumber(t2) | ||
| + | local s_on = " | ||
| + | local s_off = " | ||
| + | Set(" | ||
| + | Set(" | ||
| + | end | ||
| + | ]]></ | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| + | </ | ||
| + | |||
| + | **Файл со строковыми данными** | ||
| + | |||
| + | Основная статья "[[:lm2: | ||
| + | |||
| + | <code xml> | ||
| + | <!-- объявление xml --> | ||
| + | <?xml version=" | ||
| + | <!-- корневой элемент --> | ||
| + | < | ||
| + | <!-- строковые данные, | ||
| + | <Text ID=" | ||
| + | <!-- языковая версия, | ||
| + | <Entry Lang=" | ||
| + | <Entry Lang=" | ||
| + | </ | ||
| + | <!-- строковые данные, | ||
| + | <Text ID=" | ||
| + | <!-- языковая версия, | ||
| + | <Entry Lang=" | ||
| + | <Entry Lang=" | ||
| + | </ | ||
| + | <!-- строковые данные, | ||
| + | <Text ID=" | ||
| + | <!-- языковая версия, | ||
| + | <Entry Lang=" | ||
| + | <Entry Lang=" | ||
| + | </ | ||
| + | <!-- строковые данные, | ||
| + | <Text ID=" | ||
| + | <!-- языковая версия, | ||
| + | <Entry Lang=" | ||
| + | <Entry Lang=" | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| + | </ | ||
| + | |||
| + | **Lua-код** | ||
| + | |||
| + | Основная статья" | ||
| + | |||
| + | <code lua> | ||
| + | -- start.lua | ||
| + | -- привязка панели | ||
| + | Panel(' | ||
| + | -- подключение файла | ||
| + | Include(" | ||
| + | |||
| + | -- обработчик нажатия на кнопку | ||
| + | function H_Exit(_ev) | ||
| + | sys.Exit() | ||
| + | end | ||
| + | -- привязка обработчика к событию | ||
| + | AddEventHandler(' | ||
| + | |||
| + | |||
| + | </ | ||
| <code lua> | <code lua> | ||
| + | -- timer.lua | ||
| -- в Clock хранится текущее время в виде секунд - seconds и минут - minutes, а также интервал таймера в миллисекундах - interval и статус таймера - on = false|true | -- в Clock хранится текущее время в виде секунд - seconds и минут - minutes, а также интервал таймера в миллисекундах - interval и статус таймера - on = false|true | ||
| Clock = {seconds = 0; -- секунды | Clock = {seconds = 0; -- секунды | ||
| Строка 50: | Строка 325: | ||
| on = false; -- статус таймера | on = false; -- статус таймера | ||
| } | } | ||
| + | |||
| -- При нажатии на кнопку Старт - включается таймеры tick и lamp и текст кнопки становится Стоп | -- При нажатии на кнопку Старт - включается таймеры tick и lamp и текст кнопки становится Стоп | ||
| -- При нажатии на кнопку Стоп - таймер tick выключается и текст кнопки становится Старт | -- При нажатии на кнопку Стоп - таймер tick выключается и текст кнопки становится Старт | ||
| Строка 73: | Строка 349: | ||
| function H_refresh(ev) | function H_refresh(ev) | ||
| Clock.seconds = Clock.seconds + Clock.interval/ | Clock.seconds = Clock.seconds + Clock.interval/ | ||
| - | if Clock.seconds > 60 then | + | if Clock.seconds> |
| Clock.minutes = Clock.minutes + 1 | Clock.minutes = Clock.minutes + 1 | ||
| Clock.seconds = Clock.seconds - 60 | Clock.seconds = Clock.seconds - 60 | ||
| end | end | ||
| - | if Clock.minutes > 60 then | + | if Clock.minutes> |
| Clock.minutes = Clock.minutes - 60 | Clock.minutes = Clock.minutes - 60 | ||
| end | end | ||
| Строка 94: | Строка 370: | ||
| </ | </ | ||
| - | {{:lm2:ce:timer_project.zip|timer_project.zip}} | + | ==== Запуск проекта ==== |
| + | |||
| + | Прямые ссылки на готовый проект: | ||
| + | |||
| + | * {{:lm2:ce:win_timer_project.zip|win_timer_project.zip}} | ||
| + | * {{: | ||
| + | |||
| + | В следующих статьях описано как запускать проекты: | ||
| + | |||
| + | * [[https:// | ||
| + | * [[https:// | ||