Здравствуйте, гость ( Вход | Регистрация )

11 страниц V  1 2 3 > »   
Ответить в эту темуОткрыть новую тему
> Плагин графического интерфейса
Cockney
сообщение 24.2.2016, 11:49
Сообщение #1


********

Master
Сообщений: 1.394
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 20893
Пользователь №: 16.156



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

Ссылка(ЯДиск, надеюсь можно) : тык или Прикрепленный файл  Release0000.zip ( 93,47 килобайт ) Кол-во скачиваний: 18062


В архиве сам плагин и файл разметки. Плагин в Плагинс, а разметку рядом с пилотом.

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

Небольшое описание :

Каждый параметр заключается в *. Например, так : *par1*.

Параметры ЧУВСТВИТЕЛЬНЫ к регистру. Пробелы на концах обрезаются (для поддержки переменных).

Доступные типы элементов:

Form - само окно
Button - кнопка
Edit - поле ввода
Text - текст
Checkbox - флажок

Сами функции :

Код

GUI.ShowForm (<Имя формы>) //Показывает форму с именем

GUI.HideForm (<Имя формы>) //Скрывает форму с именем

GUI.ActionExist () //получение флага события. Возвращает 0 или 1

GUI.GetAcion () //получение описания события. Вернет массив 1х3 с именами
формы, компонента и описанием события.

GUI.Enable (<Тип элемента> <Имя формы> <Имя элемента> <Статус>) //включает/отключает элемент на форме. Статус принимает 0 или 1.

GUI.GetText (<Тип элемента> <Имя формы> <Имя элемента>) //вернет текст элемента.

GUI.SetText (<Тип элемента> <Имя формы> <Имя элемента> <Новый текст>) //устанавливает текст элемента


И небольшой скрипт управления :

Код

//Скрипт обслуживания оболочки
set linedelay 5
//Очистка начального сообщения(пока так)
set $a GUI.ActionExist ()
set #f 1
set logging clear
//Начинаем
while (#f = 1) //пока не прекратим
    set $act_ex GUI.ActionExist () //проверим наличие события
    if ($act_ex = 1)  //если есть событие
        set %action GUI.GetAction () //получаем это событие
        //тут обработка событий
        if (%action[1 3] = BUTTON_CLICK) //если нажата кнопка(любая)
            set logging Произошел клик на кнопке с именем %action[1 2]
        end_if
        if (%action[1 3] = BUTTON_DBL_CLICK) //если дабл.клик кнопки(любая)
            set logging Произошел двойной клик на кнопке с именем %action[1 2]
        end_if
        if (%action[1 3] = EDIT_CHANGE) //если редактируется поле ввода
            set $txt GUI.GetText (*Edit* * %action[1 1] * * %action[1 2] *)
            set logging Новый текст поля %action[1 2] : $txt
            if ($txt = stop) //если введено стоп
                set $a GUI.SetText (*Form* *Main* *Стоп!!!!*) //установка заголовка
                set linedelay 50 //побольше задержка перед выходом
                set #f 0
            end_if
            if ($txt = msg) //если введено стоп
                msg Введено msg
            end_if
        end_if
    end_if
end_while
exit
end_script


Тестировано на XP,7,8,8.1

Вроде все работает, однако могут быть проблемы.


Если понравилось, предлагайте идеи. Может что-то годное и выйдет.
-------------------------------------------------------------
Архив версий:
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 24.2.2016, 14:22
Сообщение #2


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



Сделай время для двойного клика побольше, а то иногда сначала срабатывает одинарный.
Цитата
И небольшой скрипт управления :

Что-то мне кажется большинство не поймут что с этим делать.
Примеры лучше попроще делать.
Код
set %action GUI.GetAction () //получаем событие
if %action [1 2] = Button and %action [1 3] = BUTTON_CLICK
    log Сделан клик по первой кнопке
end_if

Цитата
GUI.HideForm (<Имя формы>) //Скрывает форму с именем

Напиши пример, а то что-то не понял как это работает.

Можно ли сделать чтобы кнопка была в статусе зажата/отжата?
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 24.2.2016, 14:31
Сообщение #3


********

Master
Сообщений: 1.394
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 20893
Пользователь №: 16.156



Время клика задаю не я, а система. Тут возможно с задержками в скрипте надо играть.
-----
Пример писан на коленке, дабы проверить функциональность в целом.
-----
Код
set $a GUI.HideForm (*Main*) //если брать имя окна из примера разметки
--------------------
<Form_1>
    <Name>Main</Name> //имя окна, задаваемое в хмл
</Form_1>

-----
Пока не представляю, зачем нужна зажатая программно кнопка, но, думаю это вполне можно реализовать технически..

С кликами ,возможно, что-то решу. Но это даже не знаю когда возьмусь.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 24.2.2016, 15:07
Сообщение #4


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



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

Например в игре юзаются банки HP, MP и прочее. Иногда не надо использовать все. Сейчас чтобы отключить не нужные надо переключаться на пилот, останавливать скрипт и ставить // перед gosub, чтобы не было перехода к метке с какой-то банкой. А при зажатой/отжатой кнопке можно указывать к какой метке переходить, а какой нет. Сразу видно используется какой-то блок кода или нет.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 24.2.2016, 15:35
Сообщение #5


********

Master
Сообщений: 1.394
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 20893
Пользователь №: 16.156



Ну тут тогда подходят чекбоксы. выбираешь, что нужно и скрипт проверяет/выполняет. а то чет мудрено с отключением ненужных кнопок. или я не допонял.

а может так?

Код
if %action[1 2] = XP //если нажата кнопка использования XP
    //отключаем ее
   set #q 1 //флаг использования чего-то там
end_if


а в рабочем блоке :

Код
if #q = 1
/////
else
////
end_if


или другое?

Кстати, что по шрифтам? не жирноват?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 24.2.2016, 15:45
Сообщение #6


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



Цитата
а может так?

С флагами понятно как включить/отключить блок кода. При этом не понятно включился он или выключился, придётся выводить в лог или хинт результат.

Вариант с чекбоксами то что надо. Как их сделать?
Цитата
Кстати, что по шрифтам? не жирноват?

Нормально.

P.S. Ушёл на работу.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 24.2.2016, 19:20
Сообщение #7


********

Master
Сообщений: 1.394
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 20893
Пользователь №: 16.156



Теперь понял про что ты. Пока никак. Сейчас поиграюсь с кликами. Попутно добавлю новые контролы, включая чекбокс.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 25.2.2016, 22:52
Сообщение #8


********

Master
Сообщений: 1.394
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 20893
Пользователь №: 16.156



Апдейт.

-Новые элементы : чекбоксы(Checkbox), текст(Text).
-Функция GetState(). Возвращает состояние элемента(пока поддерживаются только чекбоксы). 1 - галка стоит, 0 - нет.
-Новые сообщения от контролов:
CHECKBOX_CLICK
CHECKBOX_DBL_CLICK
TEXT_CLICK
TEXT_DBL_CLICK

Пример:
Код
set $a GUI.GetState (*Имя формы, на которой лежит чекбокс* *Имя чекбокса*)

----------
Аттрибуты новых элементов смотрите в GUI.xml (узел <Text> - текст, а <CheckBox> - чекбокс).
---------
Возможно будут тормоза с работой функций, так что кто будет юзать отпишитесь есть ли они.
---------
Прикрепленный файл  Test0200.zip ( 97,04 килобайт ) Кол-во скачиваний: 6762
или Диск
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 26.2.2016, 3:40
Сообщение #9


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



Цитата
Возможно будут тормоза с работой функций, так что кто будет юзать отпишитесь есть ли они.

Есть немного, галки с чекбоксов как-то вяло ставятся и снимаются, но в целом работают.
Двойной клик по кнопкам нормально работает.
Цитата
CHECKBOX_DBL_CLICK

Вроде как не работает, да и зачем он нужен. Поставить и тут же снять галку?
Цитата
TEXT_DBL_CLICK

Один клик работает, двойной нет.


Если возможно добавь к стилю Form статус поверх всех окон.
Цитата
set $a GUI.GetState (*Имя формы, на которой лежит чекбокс* *Имя чекбокса*)

Удобнее бы было указывать заголовки чекбоксов, а не имена, если возможно.
Цитата
GUI.GetAction () //получение описания события. Вернет массив 1х3 с именами
формы, компонента и описанием события.

Лучше возвращать 4 элемента:
Форма, компонент, имя компонента, событие.
Например, есть кнопка с именем Button3 и заголовком Script5.
Удобнее в условии писать:
Код
if %action [1 3] = Script5     
//чем
if %action [1 2] = Button3

Потому что заголовок видно на форме, а за номером кнопки придётся лезть в xml файл.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 26.2.2016, 11:37
Сообщение #10


********

Master
Сообщений: 1.394
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 20893
Пользователь №: 16.156



Можно систему узнать?именно процессор и ос.
-----------
Возможно, это не тормоз, а анимация установки флажка.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 26.2.2016, 11:41
Сообщение #11


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



Запустил утром, уже нормально галки ставятся, но опять двойные клики плохо срабатывают.
Win7 x64, i7 2600k
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 26.2.2016, 11:45
Сообщение #12


********

Master
Сообщений: 1.394
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 20893
Пользователь №: 16.156



А в чем проблема брать имя чекбокса из GetAction по событию клика? или там у тебя другая система обработки?

Клики еще в работе.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 26.2.2016, 12:25
Сообщение #13


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



Цитата
А в чем проблема брать имя чекбокса из GetAction по событию клика?

Можно и так. Просто с заголовком удобнее, т. к. его видно без лишних действий.

По поводу торможения чуть позже отпишу, пока немного занят. Есть одно предположение.
Когда на компе ничего не запущено (пусть даже мелочь типа аськи или браузера) пилот в разы медленнее работает, видимо из-за технологий энергосбережения, проц частоту сбрасывает.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 26.2.2016, 13:31
Сообщение #14


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



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

Проверил. Так и есть.

Чекбоксы работают нормально.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 26.2.2016, 13:35
Сообщение #15


********

Master
Сообщений: 1.394
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 20893
Пользователь №: 16.156



Хорошо. Я уж думал мой косяк.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 26.2.2016, 19:34
Сообщение #16


********

Master
Сообщений: 1.394
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 20893
Пользователь №: 16.156



По поводу чекбоксов : да, удобнее, если отображается 5 букв на чекбоксе, а если больше? + имя это уникальный(в принципе, может быть одинаковым, но тогда система даст сбой) идентификатор любого элемента. И указав его, можно безошибочно сделать все что угодно. Так и зачем возвращать написанное на контроле?



или я опять не понял суть?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 26.2.2016, 19:45
Сообщение #17


********

Master
Сообщений: 1.394
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 20893
Пользователь №: 16.156



Апдейт.

-Пофикшены несрабатывающие события
-Добавлено свойство форм : AlwaysTop. 1 - окно всегда будет сверху других, 0 - обычное поведение.

Прикрепленный файл  Test0201.zip ( 97,38 килобайт ) Кол-во скачиваний: 6719
или Диск
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 26.2.2016, 19:54
Сообщение #18


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



Ну и в целом можно коснуться старой, но все еще болезненно актуальной темы контроля статуса: https://forum.uokit.com/index.php?s=&sh...st&p=157513
Переменные пока не выведешь, но вот массивы можно начинать разгр<вырезано анти-матом>.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 27.2.2016, 3:51
Сообщение #19


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



Цитата
По поводу чекбоксов : да, удобнее, если отображается 5 букв на чекбоксе, а если больше? + имя это уникальный(в принципе, может быть одинаковым, но тогда система даст сбой) идентификатор любого элемента. И указав его, можно безошибочно сделать все что угодно. Так и зачем возвращать написанное на контроле?

То что всё и так можно сделать это да.

Прикрепленное изображение
Что вижу в форме: Главное меню, Script1, Script2, Script3, start_script, HP, MP, CP.
Что пишу в скрипте: Main, Button, Button2, Button3, label, chk, chk2, chk3.
Т. е. вижу одно, пишу другое.


Возьмём, например, кнопку с именем Button2 и заголовком Script2. If будет выглядеть так:
Код
set %action GUI.GetAction ()
if %action [1 2] = Button2 and %action [1 3] = BUTTON_CLICK

Если надо будет что-то отредактировать в скрипте, придётся либо ползти в xml, либо выводить в лог или хинт GUI.GetAction чтобы узнать как называется кнопка.

Если же возвращать 4 элемента (форма, компонент, имя компонента, событие.), то If будет таким:
Код
set %action GUI.GetAction ()
if %action [1 3] = Script2 and %action [1 4] = BUTTON_CLICK

Сразу понятно что используется кнопка Script2.

Не думаю что кто-то будет делать кнопки с одинаковым названием. Никто ведь не пишет переменные с одинаковым названием.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 27.2.2016, 23:47
Сообщение #20


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



Двойной клик по тексту (label) копирует этот текст в буфер. Так и должно быть?
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

11 страниц V  1 2 3 > » 
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 29.3.2024, 1:48
Designed by Nickostyle