Zer0Galaxy
-
Публикации
1 220 -
Зарегистрирован
-
Посещение
-
Победитель дней
189
Сообщения, опубликованные пользователем Zer0Galaxy
-
-
Mecopy6ka, ты что, поставил АЕ на покет-версию Майна? А ОС поставить можно?
-
Желающие могут опробовать генерацию кода. Для этого надо на уже упоминавшемся компьютере создать элементы интерфейса, после чего нажать ПКМ и в выпадающем списке выбрать пункт "Генерировать код". Этот пункт в список не помещается, поэтому список нужно прокрутить колесиком. Результирующий код смотрим в файле Project1.lua. Его можно даже запустить.
-
1
-
-
Судя по всему, это будет что-то грандиозное. Хочется немного ясности. Что пользователь получит в конце после создания дизайна кнопок, окошка или списка + кнопки и прочим. Что это будет после сохранения? Луа код? А его потом уже можно и нужно дорабатывать функционально? Повесить функции кнопкам и прочее? Так? Это система быстрого визуального создания менюшек?
После создания окошек, кнопок и прочих элементов интерфейса, пользователь получит файл проекта - особый файл, который можно будет повторно открыть в редакторе и продолжить редактирование. Файл проекта можно будет преобразовать в исполняемый луа-код. Процесс преобразования я назвал генерацией, дабы не травмировать чувств интерпретационистов. А луа-код - уже редактировать и запускать как всякую другую программу. Поначалу предполагалось, что генерироваться будут только строки для создания элементов интерфейса, а логика добавляется вручную в редакторе edit. Затем возникла мысль добавить генерацию обработчиков событий. Но это требует встраивания в FormsMaker текстового редактора. Посмотрим как пойдет.
-
1
-
-
Меня смущает название темы. "Система визуального программирования" это немного другая штука. "Редактор форм" - больше подходит
Всё таки, конечным результатом работы системы будет луа-код, получаемый в результате компиляции проекта (да простит меня NEO).
-
3
-
-
Насколько я понял, в библиотеке GUI подразумевается только динамическое создание форм внутри кода программы. Без возможности подгрузки/сохранения файла параметров формы?
Если это так, то было бы логичным добавить в библиотеку что-то вроде loadForm/SaveForm, чтобы иметь возможность статические параметры формы (цвета/размеры/флаги) хранить в отдельном файле и подгружать при необходимости. А в программе пользователя оставить только логику формы.
И форма и все ее компоненты создаются динамически. Параметры компонентов предполагается задавать в коде программы.
Если хранить их в отдельном файле, то для запуска программы потребуется и этот файл. А я не хотел бы лишних файлов, необходимых для исполнения.
-
1
-
-
Для начала нужно понять главное - ложки не существует.
И трансляция и компиляция и интерпретация - это малая часть из процессов, происходящих в недрах Великого Сервера. И наши знания об этих процессах никоим образом не влияют на Его функционирование.
Мимомпрохожу.
-
5
-
-
Проект параметров формы сохраняется в отдельный файл?
Библиотека умеет подгружать этот файл?
На данный момент сохранение проекта в файл пока не реализовано. Планируется разработать структуру такого файла для сохранения и последующей загрузки проекта. И конечно же, самое интересное - это трансляция проекта в исполняемый lua-код.
Библиотека сама по себе ни с какими файлами не работает. Подгружать файл будет среда разработки.
-
1
-
-
Каждый, кто занимался разработкой человеко-машинного интерфейса под OpenOS, наверное знает какое это муторное занятие. Даже если Вы используете библиотеку GUI. То и дело приходится выходить из редактора кода, запускать свою программу, смотреть на результат своих стараний и снова заходить в редактор, чтобы исправить всего одну цифру.
Предлагаемая система позволяет создавать интерфейсы программ не в текстовом редакторе, а в графическом при помощи мыши, но самое главное - результат своей работы Вы можете видеть сразу, не выходя из редактора.
Построена система на основе уже известной Вам gui-библиотеки forms.
При входе в FormsMaker мы видим пустую форму
Щелкните правой кнопкой мыши в любом месте формы после чего откроется окно управления компонентом
Выбрав пункт "Свойства Form1" можно (будет) редактировать свойства формы, такие как цвет рамка и т.д.
Пункты "Add ..." добавляют на форму соответствующий компонент.
Пункт "Проект" позволит управлять проектом: сохранять, компилировать и т.д.
Для возврата к редактируемой форме выберите "Отмена"
К примеру мы выбрали пункт "Add frame". Это добавит на нашу форму рамку.
Таким же образом на рамку можно добавить кнопку. Щелкаем ПКМ на рамку
и выбираем "Add button"
Изменить размер рамки можно при помощи ЛКМ, потянув за правый-нижний ее угол
А перемещать рамку по форме можно перетаскивая за любое свободное её место
pastebin get wA5KMKav fmaker.lua
Приму с благодарностью любую посильную помощь в развитии проекта, как в программировании, тестировании так и просто советом.
-
19
-
-
Список.
List1=Form1:addList(left,top,onChange)
Список - визуальный компонент, способный хранить множество элементов данных различного типа, подобно таблице в Луа. Каждому элементу (item) списка ставится в соответствие строка (line), посредством которой этот элемент отображается на экране компьютера.
Параметры вызова метода addList:
left,top - (числа) координаты левого верхнего угла относительно объекта которому принадлежит компонент.
onChange - (функция) обработчик события, когда пользователь выбирает при помощи ЛКМ какой либо элемент списка.
Дополнительные свойства:
W - ширина списка (по умолчанию - 20).
H - высота (по умолчанию - 10)
border - (0, 1 или 2) рамка, по умолчанию - 2
color - цвет фона (по умолчанию - 0x000000),
fontColor - цвет шрифта и рамки(по умолчанию - 0xffffff).
selColor - цвет фона выбранной строки списка (по умолчанию -0x0000ff)
sfColor - цвет шрифта выбранной строки (по умолчанию - 0xffff00)
index - номер выбранного элемента списка
items - таблица, содержащая элементы списка
lines - таблица, содержащая строки, соответствующие элементам списка
visible - имеет значение false, если компонент скрыт (по умолчанию - true)
X, Y - абсолютные координаты левого верхнего угла
В дополнение к методам, присущим остальным компонентам (см. "кнопка"), список имеет следующие методы:
clear() - очищает список
insert([pos,]line,item) - вставляет в список в позицию pos элемент item с соответствующей ему строкой line. Все последующие элементы сдвигаются на единицу. Если параметр pos отсутствует, вставка осуществляется в конец списка.
sort([comp]) - производит сортировку списка по условию comp. Если параметр comp задан, то он должен быть функцией, принимающей три параметра: comp(list, i, j), где list - указатель на список, а i и j - номера элементов списка. Функция comp должна возвращать true, если элементы списка i и j в результате сортировки меняются местами. Если параметр comp не задан, то сортировка производится по строкам lines в алфавитном порядке.
В ближайшем будущем ожидайте презентацию системы визуального программирования на основе библиотеки forms
-
5
-
-
Почему библиотека? Это чисто прикладная программа.
-
Надо же и уроки делать.
-
2
-
-
Рамка.
Frame1=Form1:addFrame(left,top,border)
Рамка не выполняет никаких действий, а просто служит элементом декора.
Параметры вызова метода addFrame:
left,top - (числа) координаты левого верхнего угла рамки относительно объекта которому принадлежит компонент.
border - (0, 1 или 2) по умолчанию - 1.
Дополнительные свойства:
W - ширина рамки (по умолчанию - 20).
H - высота (по умолчанию - 10)
color - цвет фона (по умолчанию - 0x000000),
fontColor - цвет рамки(по умолчанию - 0xffffff).
visible - имеет значение false, если компонент скрыт (по умолчанию - true)
X, Y - абсолютные координаты левого верхнего угла
Методы компонента (см. "кнопка")
-
6
-
-
Окно ввода.
Edit1=Form1:addEdit(left,top,onEnter)
Команда создает на форма Form1 окно ввода и возвращает указатель на вновь созданный объект.
Окно ввода позволяет вводить с клавиатуры текст, ограниченный одной строкой.
Параметры вызова метода addEdit:
left,top - (числа) координаты левого верхнего угла окна относительно объекта которому принадлежит компонент.
onEnter - (функция) обработчик окончания ввода.
Левый щелчок мыши на окне переведет компонент в режим ввода текста. Завершение ввода осуществляется нажатием клавиши Enter. После чего вызывается функция-обработчик, если она определена. Функция принимает один параметр - указатель на компонент, который ее вызвал.
Дополнительные свойства:
W - ширина окна (по умолчанию - 20).
H - высота (по умолчанию - 3)
text - строка текста, введенного в окно ввода.
border - наличие рамки (по умолчанию - 1)
color - цвет фона (по умолчанию - 0x000000),
fontColor - цвет текста и рамки(по умолчанию - 0xffffff).
visible - имеет значение false, если компонент скрыт (по умолчанию - true)
X, Y - абсолютные координаты левого верхнего угла
Методы компонента (см. "кнопка")
-
6
-
-
Надпись. Создается командой:
Label1=Form1:addLabel(left,top,caption)
Команда создает на форма Form1 надпись и возвращает указатель на вновь созданный объект.
Параметры вызова метода addLabel:
left,top - (числа) координаты левого верхнего угла надписи относительно объекта которому принадлежит надпись.
caption - (строка) собственно надпись.
Дополнительные свойства:
W - ширина надписи (по умолчанию равняется количеству символов в надписи). Если количество символов превышает ширину, лишние символы справа будут обрезаны.
H - высота (по умолчанию - 1)
border - наличие рамки (по умолчанию - 0)
color - цвет фона (по умолчанию - 0x000000),
fontColor - цвет шрифта (по умолчанию - 0xffffff).
visible - имеет значение false, если надпись скрыта (по умолчанию - true)
centered - если этот параметр у становить в true, надпись будет автоматически центрироваться. (По умолчанию - false)
alignRight - если этот параметр установить в true и centered==false, надпись будет выравниваться по правому краю. (По умолчанию - false)
autoSize - если этот параметр установить в true, ширина компонента W автоматически подстраивается под самую длинную строку надписи. (По умолчанию - true). Да, да, надпись может иметь несколько строк. Разбиение на строки выполняется при помощи символа "\n".
X, Y - абсолютные координаты левого верхнего угла
Методы компонента (см. "кнопка")
-
6
-
-
Кнопка. Создается командой:
Button1=Form1:addButton(left,top,caption,onClick)
Команда создает на форме Form1 кнопку и возвращает указатель на вновь созданный объект.
Еще раз обращаю внимание: метод forms.addForm вызывается через разделитель "точка", а Form1:addButton - через "двоеточие", поскольку forms - это библиотека, а Form1 - объект.
Параметры вызова метода addButton:
left,top - (числа) координаты левого верхнего угла кнопки относительно объекта, которому принадлежит кнопка.
caption - (строка) надпись на кнопке.
onClick - (функция) обработчик нажатия на кнопку.
Левый щелчок мыши на кнопке вызовет функцию-обработчик. Функция-обработчик принимает один параметр - указатель на кнопку, которая была нажата.
Дополнительные свойства кнопки:
W - ширина кнопки (по умолчанию - 10)
H - высота кнопки (по умолчанию - 1)
border - наличие рамки (по умолчанию - 0)
color - цвет кнопки (по умолчанию - 0x606060),
fontColor - цвет надписи и рамки (по умолчанию - 0xffffff).
visible - имеет значение false, если кнопка скрыта (по умолчанию - true)
X, Y - абсолютные координаты левого верхнего угла кнопки
Методы компонента:
hide() - скрывает компонент.
show() - отображает ранее скрытый компонент
isVisible() - возвращает true, если компонент не скрыт и находится на активной форме.
redraw() - принудительно перерисовывает компонент.
Компоненты интерфейса (кнопки, надписи и т.д.) можно создавать не только на форме, но и на других компонентах. К примеру, кнопку можно создать на рамке или надпись на кнопке. При этом дочерний объект будет перемещаться, исчезать и появляться вместе с объектом-родителем.
-
5
-
-
Но когда я буду писать свой гуи, он будет раза в 4 лучше чем GML и Forms.Ты лучше заканчивай Арбузер. А потом сделаем систему визуального программирования: палитру компонентов, инспектор объектов и т.д. (кто работал в Delphi или C-билдере тот поймет). Собственно, под это я и начал делать свою гуи.
-
2
-
-
Для работы с библиотекой подключим её стандартным способом
forms=require("forms")Библиотека forms содержит следующие функции:
addForm() - создает новую форму.
run(form) - запускает обработку интерфейса, устанавливая активной форму form.
stop() - прерывает обработку интерфейса.
Форма. Создается при помощи команды:
Form1=forms.addForm()
По сути, форма - это область на экране в которой размещаются компоненты интерфейса. Если форма активна, размещенные в ней компоненты реагируют на действия мыши. Форм в Вашей программе может быть несколько, но активной будет только одна.
По умолчанию форма занимает всю область экрана. Изменить размеры формы можно задавая её параметры W и H:
Form1.W=31 Form1.H=7
а положение на экране - задавая параметры left и top:
Form1.left=10 Form1.top =5
Помимо W, H, left и top форма обладает такими свойствами:
border - наличие рамки 0-нет рамки; 1-одинарная рамка; 2-двойная рамка (по умолчанию - 0)
color - цвет формы (по умолчанию - 0х000000),
fontColor - цвет рамки (по умолчанию - 0xffffff).
Форма обладает следующими методами:
setActive() - устанавливает форму активной и перерисовывает её.
isActive() - возвращает true, если форма активна.
redraw() - принудительно перерисовывает форму, если форма активна.
addButton(left, top, caption, onClick) - добавляет на форму кнопку.
addLabel(left, top, caption) - добавляет на форму строку текста.
addEdit(left, top, onEnter) - добавляет на форму окно ввода.
addFrame(left, top, brd) - добавляет на форму рамку.
addList(left, top, onChange) - добавляет на форму список.
Поскольку форма является объектом, методы формы следует вызывать через двоеточие
Form1:setActive()
Все свойства и методы формы (за исключением setActive и isActive) присущи также другим компонентам интерфейса, которые я опишу позже.
-
10
-
-
--функция
function hello()
print("Hello World!")
end
-- преобразуем функцию в строку
str=string.dump(hello)
-- передаем на другой компьютер
...
-- восстанавливаем
hello1=loadstring(str)
-- и запускаем
hello1()
-
1
-
-
pastebin get iKzRve2g lib/forms.lua
Конечно, браузер на такой библиотеке не построить, но для небольших приложений может сгодится.
Библиотека позволяет создавать следующие визуальные компоненты:
Form (форма) - является контейнером для остальных компонентов. Служит для быстрой смены экранного интерфейса без необходимости удалять и создавать компоненты.
Button (кнопка) - тут всё понятно.
Label (метка) - просто строка текста.
Edit (окно ввода) - позволяет вводить текст.
Frame (рамка) - просто рамка.
List (список) - отображается в виде набора строк. Каждой строке ставится в соответствие элемент, способный хранить любое lua-значение (число, строку, таблицу и т.д.). Пользователь может прокручивать список, выбирать один из элементов, производить сортировку списка.
И невизуальные компоненты:
Event (событие) - обрабатывает системные события.
Timer (таймер) - позволяет вызывать функцию-обработчик с заданным периодом.
Пример работы с библиотекой:
forms=require("forms") -- подключаем библиотеку Form1=forms.addForm() -- создаем основную форму exitForm=forms.addForm() -- и форму диалога выхода exitForm.border=2 exitForm.W=31 exitForm.H=7 exitForm.left=math.floor((Form1.W-exitForm.W)/2) exitForm.top =math.floor((Form1.H-exitForm.H)/2) exitForm:addLabel(8,3,"Вы хотите выйти?") exitForm:addButton(5,5,"Да",function() forms.stop() end) exitForm:addButton(18,5,"Нет",function() Form1:setActive() end) Btn1=Form1:addButton(65,21,"Выход",function() exitForm:setActive() end) -- создаем кнопку выхода Btn1.color=0x505050 -- задаем цвет кнопки forms.run(Form1) --запускаем guiПопробовать библиотеку в действии можно в дата-центре на компьютере с координатами 10150, 14199. Для этого необходимо запустить файл form.lua
-
31
-
1
-
-
@Asummonster, готова в первом приближении "лёгкая" библиотека гуи. Можем потестировать
-
Что значит "тяжеловат"? Много файлов? Большой вес файлов? Большое потребление оперативки и процессора? Сложная имплементация?
Да, действительно...
Много файлов - библиотека, на мой взгляд, должна храниться в одном файле в папке lib, что бы пользователь не думал что куда разложить.
Большой вес файлов - Мне казалось, что минимальный набор компонент можно реализовать гораздо меньшим кодом. Хотя на этот счет уже не уверен.
Хотя...
Большое потребление оперативки и процессора - не тестировал.
Сложная имплементация - если не рассматривать упомянутые Асумонстром стили, использование библиотеки не слишком сложно даже для новичка. Интерфейс моей библиотеки существенно не отличается от GML, хотя использование некоторых компонент будет иное, заточенное под мои потребности.
Разумеется, всё сказанное мной не отрицает библиотеку GML. Свою я делаю исключительно для удовольствия. Что получится, посмотрим.
-
Да, вопрос возник при написании гуи. Так у меня вся библиотека гуи получилась меньше чем одна функция read
-
Это тест на нестандартное мышление. Я, к примеру, знаю один способ, но он мне не очень нравится. Может кто еще предложит.
-
При вызове функции term.read() все символы, находящиеся в той же строке справа от курсора очищаются, а при вызове io.read() - по мере ввода смещаются вправо.
Существует ли простой способ ограничивать поле ввода так, чтобы символы справа от этого поля не изменялись, а вводимая строка при достижении конца поля смещалась влево, как если бы достигала конца экрана?
Вариант написать свою функцию read не рассматривается.

Система визуального программирования FormsMaker
в Графика
Опубликовано:
При выборе пункта "Свойства" теперь доступно окно редактирования свойств компонента
В этом окне можно изменять цвет, надпись и другие свойства. Тестовую версию программы по прежнему можно опробовать в дата-центре на компьютере с координатами 10150, 14199.