|
Плагин графического интерфейса |
|
|
Cockney |
24.2.2016, 11:49
|
Master
Сообщений: 1.402
Регистрация: 22.6.2013 Группа: Пользователи Наличность: 21877
Пользователь №: 16.156
|
Набросал ради развлечения небольшой плагин, позволяющий общаться с диалогами любой сложности(но пока урезаные). Ссылка(ЯДиск, надеюсь можно) : тык или
Release0000.zip ( 93,47 килобайт )
Кол-во скачиваний: 18324В архиве сам плагин и файл разметки. Плагин в Плагинс, а разметку рядом с пилотом. Саму разметку пока не документирую(будет, если время позволит), но там несложно разобрать что к чему. Удаление полей чревато исключением(пока нет проверок). Желательно заполнять все поля, однако некоторые спокойно могут быть пустыми(какие именно, укажу возможно позже). Небольшое описание : Каждый параметр заключается в *. Например, так : *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 Вроде все работает, однако могут быть проблемы. Если понравилось, предлагайте идеи. Может что-то годное и выйдет. ------------------------------------------------------------- Архив версий:
|
|
|
|
cirus |
24.2.2016, 14:22
|
Elder
Сообщений: 3.480
Регистрация: 18.8.2014 Группа: Пользователи Наличность: 27514
Пользователь №: 16.971
Возраст: 29
|
Сделай время для двойного клика побольше, а то иногда сначала срабатывает одинарный. Цитата И небольшой скрипт управления : Что-то мне кажется большинство не поймут что с этим делать. Примеры лучше попроще делать. Код set %action GUI.GetAction () //получаем событие if %action [1 2] = Button and %action [1 3] = BUTTON_CLICK log Сделан клик по первой кнопке end_if Цитата GUI.HideForm (<Имя формы>) //Скрывает форму с именем Напиши пример, а то что-то не понял как это работает. Можно ли сделать чтобы кнопка была в статусе зажата/отжата?
|
|
|
|
Cockney |
24.2.2016, 14:31
|
Master
Сообщений: 1.402
Регистрация: 22.6.2013 Группа: Пользователи Наличность: 21877
Пользователь №: 16.156
|
Время клика задаю не я, а система. Тут возможно с задержками в скрипте надо играть. ----- Пример писан на коленке, дабы проверить функциональность в целом. ----- Код set $a GUI.HideForm (*Main*) //если брать имя окна из примера разметки -------------------- <Form_1> <Name>Main</Name> //имя окна, задаваемое в хмл </Form_1>
----- Пока не представляю, зачем нужна зажатая программно кнопка, но, думаю это вполне можно реализовать технически.. С кликами ,возможно, что-то решу. Но это даже не знаю когда возьмусь.
|
|
|
|
Cockney |
24.2.2016, 15:35
|
Master
Сообщений: 1.402
Регистрация: 22.6.2013 Группа: Пользователи Наличность: 21877
Пользователь №: 16.156
|
Ну тут тогда подходят чекбоксы. выбираешь, что нужно и скрипт проверяет/выполняет. а то чет мудрено с отключением ненужных кнопок. или я не допонял. а может так? Код if %action[1 2] = XP //если нажата кнопка использования XP //отключаем ее set #q 1 //флаг использования чего-то там end_if а в рабочем блоке : Код if #q = 1 ///// else //// end_if или другое? Кстати, что по шрифтам? не жирноват?
|
|
|
|
Cockney |
25.2.2016, 22:52
|
Master
Сообщений: 1.402
Регистрация: 22.6.2013 Группа: Пользователи Наличность: 21877
Пользователь №: 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 килобайт )
Кол-во скачиваний: 7030 или Диск
|
|
|
|
cirus |
26.2.2016, 3:40
|
Elder
Сообщений: 3.480
Регистрация: 18.8.2014 Группа: Пользователи Наличность: 27514
Пользователь №: 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 файл.
|
|
|
|
cirus |
27.2.2016, 3:51
|
Elder
Сообщений: 3.480
Регистрация: 18.8.2014 Группа: Пользователи Наличность: 27514
Пользователь №: 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. Не думаю что кто-то будет делать кнопки с одинаковым названием. Никто ведь не пишет переменные с одинаковым названием.
|
|
|
|
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|