| 
		
	
	
	
	
	   Плагин графического интерфейса | 
	 
	    
	  | 
	           | 
	 
   
	 
  
 
	
		| Cockney | 
		
			
			
				   24.2.2016, 11:49
			 
			
			
		 | 
	 
	
		
        	
  
        		        
  
        		Master 
        		Сообщений: 1.404 
        		Регистрация: 22.6.2013         		Группа: Пользователи Наличность: 22675         		
        		Пользователь №: 16.156
  
        		 
        	 
        	   
        | 
       
			
			Набросал ради развлечения небольшой плагин, позволяющий общаться с диалогами любой сложности(но пока урезаные). Ссылка(ЯДиск, надеюсь можно) :  тык или   
 Release0000.zip ( 93,47 килобайт )
 Кол-во скачиваний: 19024В архиве сам плагин и файл разметки. Плагин в Плагинс, а разметку рядом с пилотом. Саму разметку пока не документирую(будет, если время позволит), но там несложно разобрать что к чему.  Удаление полей чревато исключением(пока нет проверок). Желательно заполнять все поля, однако некоторые спокойно могут быть пустыми(какие именно, укажу возможно позже). Небольшое описание : Каждый параметр заключается в *. Например, так : *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         		Группа: Пользователи Наличность: 26043         		
        		Пользователь №: 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.404 
        		Регистрация: 22.6.2013         		Группа: Пользователи Наличность: 22675         		
        		Пользователь №: 16.156
  
        		 
        	 
        	   
        | 
       
			
			Время клика задаю не я, а система. Тут возможно с задержками в скрипте надо играть. ----- Пример писан на коленке, дабы проверить функциональность в целом. ----- Код set $a GUI.HideForm (*Main*) //если брать имя окна из примера разметки -------------------- <Form_1>     <Name>Main</Name> //имя окна, задаваемое в хмл </Form_1>
  ----- Пока не представляю, зачем нужна зажатая программно кнопка, но, думаю это вполне можно реализовать технически.. С кликами ,возможно, что-то решу. Но это даже не знаю когда возьмусь.  
			
			
					
		 | 
	 
	
		| 
			
		 | 
		
			
			
			
         	
          | 
	 
	| 
	
	 | 
 
 
	
		| Cockney | 
		
			
			
				   24.2.2016, 15:35
			 
			
			
		 | 
	 
	
		
        	
  
        		        
  
        		Master 
        		Сообщений: 1.404 
        		Регистрация: 22.6.2013         		Группа: Пользователи Наличность: 22675         		
        		Пользователь №: 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.404 
        		Регистрация: 22.6.2013         		Группа: Пользователи Наличность: 22675         		
        		Пользователь №: 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 килобайт )
 Кол-во скачиваний: 7350 или  Диск 
			
			
					
		 | 
	 
	
		| 
			
		 | 
		
			
			
			
         	
          | 
	 
	| 
	
	 | 
 
 
	
		| cirus | 
		
			
			
				   26.2.2016, 3:40
			 
			
			
		 | 
	 
	
		
        	 
  
        		          
  
        		Elder 
        		Сообщений: 3.480 
        		Регистрация: 18.8.2014         		Группа: Пользователи Наличность: 26043         		
        		Пользователь №: 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         		Группа: Пользователи Наличность: 26043         		
        		Пользователь №: 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. Не думаю что кто-то будет делать кнопки с одинаковым названием. Никто ведь не пишет переменные с одинаковым названием.  
			
			
					
		 | 
	 
	
		| 
			
		 | 
		
			
			
			
         	
          | 
	 
	| 
	
	 | 
 
 
 
	2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0) 
	Пользователей: 0  
 
        				  
  | 
 |