Ktlo 789 Опубликовано: 12 июня, 2015 Данное API будет добавлять в вашу систему более удобные средства программирования разных элементов типа кнопки, картинки, процесса в виде разных объектов. Это API ещё находится в разработке, пока я добавил один элемент, кнопку. Я постарался сделать это API максимально гибким, и пока я не начал делать следующий элемент, хотелось бы услышать ваше мнение. Устанавливается всё очень просто, как любая другая библиотека. Скачать можно с pastebin. Кнопка Для того, чтобы получить кнопку, как объект, нужно использовать следующую функцию: local Object = require("Имя_файла") local Button = Object.New.Button{xPos=number, yPos=number, Width=number, Height=number} Разберём необходимые параметры: xPos, yPos - числа, обозначающее положение верхнего левого угла кнопки; Width, Height - длина и высота соответственно. Также кнопки есть дополнительные параметры, которые можно не указывать: Screen - адрес монитора с кнопкой (переключает видеокарту на другой монитор, если параметр указывает на не подключённый монитор), выдаёт ошибку, если такого монитора нет; Text - текст на кнопке, переносится на следующую строку по центру кнопки автоматически; TextColor - цвет текста, если не указан, ставит белый; BackgroundColor - цвет кнопки, если не указан ставит синий; ActiveColor - цвет нажатой кнопки, по стандарту зелёный; InactiveColor - цвет неиспользуемой кнопки, по стандарту серый; Time - время нажатия, по стандарту 0.3 секунды; Style - стиль кнопки. Их всего два, с округлёнными углами (по стандарту) и ровный прямоугольник; Visible - параметр видимости, не рисует кнопку автоматически, если false, и рисует, если true. Все параметры - ключи таблицы, и по-этому могут быть указаны в любом порядке. Также вы спокойно можете сделать так: local Object = require"object" local params = {xPos=2, yPos=2, Width=10 ,Height=4, Text=54679183} local Button1 = Object.New.Button(params) local Button2 = Object.New.Button(params) И это будет работать. Для получения значения одного из параметров, можно сделать следующее: local Text = Button.Text Но вы не можете сделать это в другую сторону, а именно: Button.Text = "klopsterinator" --Не работает Все параметры, которые вы задали при создании кнопки (включая свои, которых нет в списке) - только читаемые. Кнопка имеет 3 встроенных функции (а можно ведь и свои сделать ). Первая из них это: Button.Draw( state ) --Рисует кнопку Если параметр state не указан, то будет нарисована обычная кнопка, если "active", то активная, если "inactive", то неактивная. Далее: Button.Set{} Меняет любые параметры кнопки и добавляет ваши. Button.Detect{Action=string} Детектирует действия на экране, связанные с кнопкой, возвращает true, если действие с кнопкой произошло, false, если нет, и значение CurrentButton. Имеет несколько параметров. Необходимые: Action - действие, может быть "touch", "drag", "scroll" и "drop". Дополнительные: Button - целевая кнопка мыши или целевое направление действия "scroll". Следующие несколько параметров нужны, если вы используете несколько кнопок одновременно. Screen - экран, полученный из функции event.pull(), x, y - координаты точки, полученные из функции event.pull(), CurrentButton - то же, что и Button, только полученное из event.pull(). Пример кода local Object = require"object" local event = require"event" local Button = Object.New.Button{xPos=2, yPos=2, Width=11, Height=4, Text="Я - кнопка,и я работаю!!!"} local detect = { } detect.Action = "touch" _, detect.Screen, detect.x, detect.y, detect.CurrentButton = event.pull(detect.Action) if Button.Detect(detect) then Button.Set{Text="Нажата"} Button.Draw("inactive") end Если есть какие-то предложения по улучшению, пишите. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
LeshaInc 625 Опубликовано: 12 июня, 2015 local function toLines(str, w) --Переносит текст на следующую строку, если не хватает места А "/n" отменили? local function rusType(var) --Руссифицированная функция type Зачем? В целом неплохо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Ktlo Автор темы 789 Опубликовано: 12 июня, 2015 local function toLines(str, w) --Переносит текст на следующую строку, если не хватает места А "/n" отменили? Тогда будет писать с начала строки, а нужно, чтобы писал на кнопке. local function rusType(var) --Руссифицированная функция type Зачем? Я хотел, чтобы ошибки выводились на русском языке вместе с неправильным типом заданного параметра. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
1Ridav 1 049 Опубликовано: 12 июня, 2015 http://computercraft.ru/wiki/ComputerCraft/GUI_%D0%B1%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA%D0%B0 Мой вариант графического фреймворка для СС, может поможет в чем либо. 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Krutoy 1 169 Опубликовано: 12 июня, 2015 Хорошее оформление темы и хорошая идея. Но... Есть мощный и уже готовый интерфейс GML https://github.com/OpenPrograms/Gopher-Programs/wiki/GML Я еще со времен программирования Базара с Семоро довел GML до работы с юникодом и исправил множество ошибок. Велосипед конечно придумывать интересно, но результат в ряд ли будет лучше. По структуре ты уже делаешь нерасширяемую структуру. Мне нравится как сделан Windows.Forms. Там все элементы начинаются с простых классов, например "Control" и потом наследуются глубже и глубже. Например, та же кнопка наследуется из "ButtonBase", который также наследуется чекбоксами. Еще много конечно, что можно посоветовать. Но закончу на том, что писать в луа названия с больших букв - плохой стиль. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах