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

Zer0Galaxy

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

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

  • Посещение

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

    189

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


  1. Чередуя дни беспросветной лени с часами бешеного программирования, удалось реализовать редактор обработчиков событий. Таким образом FormsMaker начинает приобретать черты полноценной системы программирования. Продемонстрирую на примере простенькой программы - счетчик количества нажатий на кнопку.

    Запустим fmaker и создадим на форме метку (addLabel). Эта метка будет отображать количество нажатий. Необходимо установить начальное значение равное нулю, для чего щелкнем ПКМ на метке и откроем окно свойств. Выберем свойство "caption" (надпись) и зададим ему новое значение - "0"

    post-7-0-44038000-1440071175_thumb.png

    Закроем окно свойств метки и аналогичным образом создадим кнопку (addButton). В качестве надписи укажем - "+1"

    post-7-0-29730500-1440071180_thumb.png

    Щелкнем на строчку onClick в окне свойств кнопки. onClick - это обработчик нажатия на кнопку. Пока он не привязан ни к какой функции, о чем нам и сообщается.

    post-7-0-28268500-1440071186_thumb.png

    Что бы создать функцию обработки, нажимаем кнопку "New" и попадаем в редактор обработчика событий

    post-7-0-10419600-1440071193_thumb.png

    Заголовок функции-обработчика и завершающий end создаются автоматически. Наша задача прописать тело функции

    post-7-0-78805100-1440071199_thumb.png

    Строчка 

    Label1.caption=Label1.caption+1

    увеличивает значение надписи на единицу. А строчка

    Label1:redraw()
    

    вызывает перерисовку компонента Label1.

    Для выхода из редактора обработчика событий необходимо кликнуть за пределами поля редактирования или нажать F10. Вот, собственно, и всё программирование. Теперь необходимо сгенерировать код, для чего вызвать соответствующий пункт меню

    post-7-0-70738600-1440071205_thumb.png

    ... и выйти из FormsMaker

    post-7-0-17667700-1440071211_thumb.png

    Что бы посмотреть код, получившийся в результате генерации, откроем его командой "edit Project1.lua"

    post-7-0-64917100-1440071216_thumb.png

    А запустив его на выполнение, можно убедиться в его работоспособности

    post-7-0-88628900-1440072510_thumb.png

    Напоминаю, с последней версией редактора можно поэкспериментировать в дата-центре на компьютере с координатами 10150, 14199.

    • Нравится 6

  2. Ивент заканчивается при выходе из функции event.pull. А это происходит уже внутри тела term.read

    Можно сделать даже так

    computer.pushSignal("event1")  --ставим в очередь событие 1
    computer.pushSignal("event2")  --ставим в очередь событие 2
    computer.pushSignal("event3")  --ставим в очередь событие 3
    repeat
      ev=event.pull(1)             -- обрабатываем события
      print(ev)
    until not ev

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

    • Нравится 1

  3.  

     

    Тебе выдали вместо программы HTML-страницу, о чём символизирует ошибка ().
    Не похоже. Я выполнил действия, как на приведенном скрине - у меня работает. Наверное, в код вкралась ошибка.  

    DiNeoNew, выполни команду

    edit editor
    

    и выложи что получилось


  4. Выполняется код: local r=term.read()

    как программно вставить в ввод строку?

        computer.pushSignal("key_down",kbd.address,0,200) --имитируем нажатие стрелки вверх
        r=term.read({"bla-bla-bla"})  -- вызываем read с прописанной историей
    
    • Нравится 1

  5. Предлагаю никаких особых команд не делать, а сделать что бы посылка типа "$$ <текст>" в чат передавала этот текст во входной буфер компьютера. А содержимое экрана с заданной периодичностью или по событию отправлялось на очки. Получится удаленная консоль.


  6. TextEdit должен быть похож на компонент Edit, с той лишь разницей, что Edit это редактор одной строки, а TextEdit - многострочный редактор. Но с добавлением этого компонента библиотека forms должна остаться "легкой", а для этого нужно максимально использовать системные ресурсы. К примеру, для создания Edit я использовал стандартный term.read, хоть и не совсем обычным способом.

    • Нравится 1

  7. Если ивент стандартный из ОС, то можно легко найти в документации опсаниевсях ивентов ОС.

    Вспомнился анекдот

     

    Математику, физику и инженеру дали три одинаковых ластика и попросили найти их объём. Математик достал сантиметр и измерил длину окружности ластика. Затем он разделил результат на два Пи, чтобы узнать радиус, возвёл полученное значение в куб, снова разделил на Пи, потом разделил на три четверти и таким образом получил объём.

    Физик взял ровно 1.00000 литр воды, бросил туда ластик и измерил объём вытесненной воды.

    А инженер? А инженер записал серийный номер ластика и посмотрел объём в справочнике.

     

    • Нравится 2

  8.  

     

    А не будет ли лучше, редактировать свойства в компоненте по типу TextEditor?
    При клике на какое то из свойств открывается окно редактирования свойства (его я не показал на скриншоте), в котором присутствует компонент Edit. В этот Edit вводится новое значение свойства. Или речь идет об одном TextEditorе, в котором редактируются сразу все свойства?
    • Нравится 1

  9. Последовательности из большого количества elseif можно заменять на таблицу функций. Сравни эти две реализации:

    if     a==1 then foo1()
    elseif a==2 then foo2()
    elseif a==3 then foo3()
    elseif a==4 then foo4()
    elseif a==5 then foo5()
    -- и т.д.
    else error()
    end
    

    и

    t={foo1,foo2,foo3,foo4,foo5 }
    if t[a] then t[a]()
    else error()
    end
    
    • Нравится 2

  10. Для уточнения названий событий и их параметров я пользовался вот такой программкой

    event=require("event")
    while true do
      ev={event.pull()}
      for i=1,#ev do
        if type(ev[i])=="string" then ev[i]='"'..ev[i]..'"' end
        io.write(ev[i].." ")
      end
      print()
    end
    

    Но dmesg лучше.

    • Нравится 1

  11.  

     

    А как скоро будет готов релиз?
    Кто же его знает. Как дело пойдет. В принципе, то что есть уже можно использовать.

     

     

    И чем можно помочь для ускорения выпуска?
     Тестировать, находить баги, предлагать свои варианты реализации программы.
    • Нравится 1

  12. Получился редактор луа таблиц )

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

    • Нравится 1
×
×
  • Создать...