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

"Лёгкая" библиотека GUI

Рекомендуемые сообщения

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

К стати, не рекомендую использовать многопоточность на основе thread совместно с forms. Они могут передраться.

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


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

 

 

К стати, не рекомендую использовать многопоточность на основе thread совместно с forms. Они могут передраться.

Окей, если бы все было с ними хорошо, то они бы давно бы были как одно единое целое  B-) 

 

P.S. Самое страшное, что сейчас очень сложно найти более или менее адекватную (и современную), простую в использовании GUI либу чтобы она могла включать в себя много чего....

На форуме я в частности насчитал лишь 3 штуки (возможно и больше есть, но эти либы в топе раздела): твоя, либа от Крутого, ну и всеми забытого нами господина Элиты, мать его, ECS :D

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


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

 

 

onEnter - (функция) обработчик окончания ввода
Что за обработчик окончания ввода? 

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


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

Когда ты энтер жмёшь (или кликаешь за пределами поля), обработчик вызывается.

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


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

Я уже 1 год не могу понять! Как вытащить текст из edit чтобы он записался в переменную?

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


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

Я уже 1 год не могу понять! Как вытащить текст из edit чтобы он записался в переменную?

Edit1.text не пробовал присваивать переменной?

Изменено пользователем Ingr

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


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

Я уже 1 год не могу понять! Как вытащить текст из edit чтобы он записался в переменную?

Edit может работать в двух режимах: редактор строки и редактор текста. По умолчанию он настроен на редактирование строки. В этом случае строка вытаскивается из редактора просто чтением поля text

var = Edit1.text

Если перед началом редактирования полю text присвоить пустую (или не пустую) таблицу

Edit1.text = {}

то редактор переходит в режим редактирования многострочного текста. В этом случае каждая строка текста доступна как элемент таблицы

var = Edit1.text[1]
Изменено пользователем Zer0Galaxy

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


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

Отличная библиотека, простая и удобная.
Было бы неплохо добавить что-то типа :isActive() для Timer и Event, а также :addEvents("key_down","key_up",...) для форм (возможно в другом формате).

Изменено пользователем AndySingularity

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


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

 

 

Было бы неплохо добавить что-то типа :isActive() для Timer и Event
 

Я забыл упомянуть в описании, таймер имеет поле Enabled, которое принимает значение true, когда таймер работает и false в противном случае. А для события даже не представляю как это сделать. Событие ведь не приостанавливается, в отличии от таймера. Его можно только уничтожить методом Event1:destruct().

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


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

А как можно получить user-а, нажавшего кнопку? Например, есть кнопка "ВХОД", как при нажатии на эту кнопку в функцию-обработчик передать ник-нейм нажавшего(user)?

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


Ссылка на сообщение
Поделиться на других сайтах
А как можно получить user-а, нажавшего кнопку? Например, есть кнопка "ВХОД", как при нажатии на эту кнопку в функцию-обработчик передать ник-нейм нажавшего(user)?
Описание обработчика onClick устаревшее. В обработчик передается еще один параметр - ник пользователя, нажавшего кнопку. Просто в обработчике добавь еще один параметр: user. Должно получиться.

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


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

А как насчет двойной буферизации? Пусть библиотека и "лёгкая", тем не менее очень удобная.
Я вот с нее начинал. Глубоко проникся. Однако проект вырос - нагрузка выросла. Нет ну совсем никакого желания переписывать графический интерфейс с нуля, особенно если увидеть масштаб документации (с этой же библиотекой можно разобраться в считаные минуты).

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


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

Библиотека довольно самодостаточная, в ней только самые нужные функции, но можно добавлять свои модули.

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

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


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

 

 

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

Не понял, при чем тут демон?
То, как я себе это представляю: написать обертку для gpu компонента, являющуюся промежуточным звеном между этой библиотекой и библиотекой двойной буферизации. Тогда можно работать с такой оберткой как с gpu. Если об этом и была речь, то эту штуку и хотелось бы.  :D
Хотя это уже совсем другая библиотека, да.

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


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

Господа люди умные, подскажите смертному простому косяк его

в зачатке программы при нажатии на кнопки изменяется переменная en

эту переменную выводит Label1

дабы выводил он верно, к каждой кнопке дополнительно вывесил Label1:redraw()

но... все еще выводит 0

где же тут косяк ? не заметил очевидную опечатку или не так понял синтаксис методов ?

 

Осторожно! Крайняя упоротость!

 

 

require("component").gpu.setResolution(60,50)
forms=require("forms")
forms.ignoreAll()

Form1=forms.addForm()
Form1.color=12566463
Form1.border=1

en = 0

function Button1onClick(self, user)
 en = en - 1000000
 Label1:redraw()
end

Button1=Form1:addButton(13,12,"-1M",Button1onClick)
Button1.color=7217965

function Button2onClick(self, user)
 en = en - 100000
 Label1:redraw()
end

Button2=Form1:addButton(13,14,"-100К",Button2onClick)
Button2.color=7217965

function Button3onClick(self, user)
 en = en - 10000
 Label1:redraw()
end

Button3=Form1:addButton(13,16,"-10К",Button3onClick)
Button3.color=7217965

Label1=Form1:addLabel(24,14,en)
Label1.centered=true
Label1.color=984582
Label1.autoSize=false
Label1.fontColor=12779488
Label1.W=10

function Button4onClick(self, user)
 en = en + 1000000
 Label1:redraw()
end

Button4=Form1:addButton(35,12,"+1М",Button4onClick)
Button4.color=8101979

function Button5onClick(self, user)
 en = en + 100000
 Label1:redraw()
end

Button5=Form1:addButton(35,14,"+100к",Button5onClick)
Button5.color=8101979

function Button6onClick(self, user)
 en = en + 10000
 Label1:redraw()
end

Button6=Form1:addButton(35,16,"+10К",Button6onClick)
Button6.color=8101979

Label2=Form1:addLabel(10,9,"Выберите количество покупаемой энергии")
Label2.color=10395294
Label2.fontColor=0
Label2.W=38
Label2.border=4

Button7=Form1:addButton(24,19,"Оплатить")
Button7.fontColor=0
Button7.color=14329120

Label3=Form1:addLabel(10,24,"Проведите смарт-картой по считывателю")
Label3.color=10395294
Label3.fontColor=0
Label3.W=37

Label4=Form1:addLabel(26,26,"<<<<<<")
Label4.color=10395294
Label4.fontColor=0
Label4.W=6

Label5=Form1:addLabel(14,33,"Количество энергии в хранилище:")
Label5.color=10395294
Label5.fontColor=0
Label5.W=31

Label6=Form1:addLabel(24,36,"Label6")
Label6.centered=true
Label6.color=8060927
Label6.autoSize=false
Label6.fontColor=0
Label6.W=10
Label6.alignRight=true

forms.run(Form1)

 

 

Сначала измени текст на самом элементе, а потом перерисовывай. когда ты меняешь начальную переменную, ты меняешь только ее значение, у других переменных значение не меняется. 

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


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

Сначала измени текст на самом элементе, а потом перерисовывай. когда ты меняешь начальную переменную, ты меняешь только ее значение, у других переменных значение не меняется. 

Оо"

год прошел :D

я уже переписал вроде-бы...

или нет, не помню

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


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

Привет! Поясните как должен выглядеть вызов функции по кнопке.

 

Так
 

Form:addButton(20,5,"Open file",function() Моя функция() end)

или так?

Form:addButton(20,5,"Open file", Моя функция())

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


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

 

Привет! Поясните как должен выглядеть вызов функции по кнопке.

 

Так

 

Form:addButton(20,5,"Open file",function() Моя функция() end)

или так?

Form:addButton(20,5,"Open file", Моя функция())

Вот так:

function My_func()
-- что-то там
end

Form:addButton(20,5,"Open file", My_func) -- без скобочек

Но можно и анонимной функцией

Form:addButton(20,5,"Open file", function () -- что-то там -- end)

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


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

Ребят, помогите разобраться с событиями в этой библиотеке. У меня есть программа, которая должна уметь принимать сообщения по модему и писать его в лейбл. Решить ее выходит только с помощью огромного костыля в виде таймера и pullSignal, который просто каждую секунду слушает событие модема и перерисовывает лейбл. При использовании событий почему-то выкидывает или nil, или вообще ничего.

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


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

Родина дала тебе event.listen, используй его мудро!

 

Вот пример кода

local valid_users = {["man_cubus"] = true}

local function valid(name)
  return valid_users[name]
end

function common.motion_handler(...)
local evt = {...}
  -- evt[1] всегда равно "motion" потому что именно это событие мы и будем слушать,
  -- остальные поля в соответствии с описанием события на ocdoc.cil.li
  if valid(evt[6]) then
    common.red_actions.process_sensor(evt[2]) --[[эта функция тут не показана,
    но evt[2] - это будет адрес сенсора движения, от которого поймано сообщение]]
  end
end

common.event.listen("motion", common.motion_handler)
Изменено пользователем man_cubus

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


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

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

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

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

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

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

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

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

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


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