Перейти к содержимому

Zer0Galaxy

Гуру
  • Публикации

    1 220
  • Зарегистрирован

  • Посещение

  • Победитель дней

    189

Сообщения, опубликованные пользователем Zer0Galaxy


  1. При выборе пункта "Свойства" теперь доступно окно редактирования свойств компонента

    post-7-0-12691700-1439302103_thumb.png

    В этом окне можно изменять цвет, надпись и другие свойства. Тестовую версию программы по прежнему можно опробовать в дата-центре на компьютере с координатами 10150, 14199.

    • Нравится 4

  2. Желающие могут опробовать генерацию кода. Для этого надо на уже упоминавшемся компьютере создать элементы интерфейса, после чего нажать ПКМ и в выпадающем списке выбрать пункт "Генерировать код". Этот пункт в список не помещается, поэтому список нужно прокрутить колесиком. Результирующий код смотрим в файле Project1.lua. Его можно даже запустить.

    • Нравится 1

  3. Судя по всему, это будет что-то  грандиозное. Хочется немного ясности. Что пользователь получит в конце после создания дизайна кнопок, окошка или списка + кнопки и прочим. Что это будет после сохранения? Луа код?  А его потом уже можно и нужно дорабатывать функционально? Повесить функции кнопкам и прочее? Так?  Это система быстрого  визуального создания менюшек?

    После создания окошек, кнопок и прочих элементов интерфейса, пользователь получит файл проекта - особый файл, который можно будет повторно открыть в редакторе и продолжить редактирование. Файл проекта можно будет преобразовать в исполняемый луа-код. Процесс преобразования я назвал генерацией, дабы не травмировать чувств интерпретационистов. А луа-код - уже редактировать и запускать как всякую другую программу. Поначалу предполагалось, что генерироваться будут только строки для создания элементов интерфейса, а логика добавляется вручную в редакторе edit. Затем возникла мысль добавить генерацию обработчиков событий. Но это требует встраивания в FormsMaker текстового редактора. Посмотрим как пойдет.

    • Нравится 1

  4. Меня смущает название темы. "Система визуального программирования" это немного другая штука. "Редактор форм" - больше подходит

    Всё таки, конечным результатом работы системы будет луа-код, получаемый в результате компиляции проекта (да простит меня NEO). 

    • Нравится 3

  5. Насколько я понял, в библиотеке GUI подразумевается только динамическое создание форм внутри кода программы. Без возможности подгрузки/сохранения файла параметров формы?

    Если это так, то было бы логичным добавить в библиотеку что-то вроде loadForm/SaveForm, чтобы иметь возможность статические параметры формы (цвета/размеры/флаги) хранить в отдельном файле и подгружать при необходимости. А в программе пользователя оставить только логику формы.

    И форма и все ее компоненты создаются динамически. Параметры компонентов предполагается задавать в коде программы.

    Если хранить их в отдельном файле, то для запуска программы потребуется и этот файл. А я не хотел бы лишних файлов, необходимых для исполнения.

    • Нравится 1

  6. Для начала нужно понять главное - ложки не существует.

    И трансляция и компиляция и интерпретация - это малая часть из процессов, происходящих в недрах Великого Сервера. И наши знания об этих процессах никоим образом не влияют на Его функционирование.

    Мимомпрохожу.

    • Нравится 5

  7. Проект параметров формы сохраняется в отдельный файл?

    Библиотека умеет подгружать этот файл?

    На данный момент сохранение проекта в файл пока не реализовано. Планируется разработать структуру такого файла для сохранения и последующей загрузки проекта. И конечно же, самое интересное - это трансляция проекта в исполняемый lua-код.

    Библиотека сама по себе ни с какими файлами не работает. Подгружать файл будет среда разработки.

    • Нравится 1

  8. Список.

    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

  9. Рамка.



    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

  10. Окно ввода.



    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

  11. Надпись. Создается командой:



    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

  12. Кнопка. Создается командой:

    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

  13.  

     

    Но когда я буду писать свой гуи, он будет раза в 4 лучше чем GML и Forms.

    Ты лучше заканчивай Арбузер. А потом сделаем систему визуального программирования: палитру компонентов, инспектор объектов и т.д. (кто работал в Delphi или C-билдере тот поймет). Собственно, под это я и начал делать свою гуи.

    • Нравится 2

  14. Что значит "тяжеловат"? Много файлов? Большой вес файлов? Большое потребление оперативки и процессора? Сложная имплементация?

    Да, действительно...

    Много файлов - библиотека, на мой взгляд, должна храниться в одном файле в папке lib, что бы пользователь не думал что куда разложить.

    Большой вес файлов -  Мне казалось, что минимальный набор компонент можно реализовать гораздо меньшим кодом. Хотя на этот счет уже не уверен.

    Хотя...

    Большое потребление оперативки и процессора - не тестировал.

    Сложная имплементация - если не рассматривать упомянутые Асумонстром стили, использование библиотеки не слишком сложно даже для новичка. Интерфейс моей библиотеки существенно не отличается от GML, хотя использование некоторых компонент будет иное, заточенное под мои потребности.

    Разумеется, всё сказанное мной не отрицает библиотеку GML. Свою я делаю исключительно для удовольствия. Что получится, посмотрим.


  15. При вызове функции term.read() все символы, находящиеся в той же строке справа от курсора очищаются, а при вызове io.read() - по мере ввода смещаются вправо.

    Существует ли простой способ ограничивать поле ввода так, чтобы символы справа от этого поля не изменялись, а вводимая строка при достижении конца поля смещалась влево, как если бы достигала конца экрана?

    Вариант написать свою функцию read не рассматривается.

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