Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Класс "БыстроеКолесоМыши" (число прочтений - 1756 )
slider26
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 256
Зарегистрирован: 01. Июня 2006
Класс "БыстроеКолесоМыши"
14. Сентября 2009 :: 02:51
Печать  
В тексте сообщения ниже представлен код класса, позволяющего снять нагрузку на базу при прокрутке журналов колесом мыши.
Работает след. образом:
Перехватывает событие скроллинга мыши на форме журнала и подменяет его:
При отжатом колесе мыши каждый щелчок интерпретируется как стрелка вверх или вниз, нажатая "СтрокНаЩелчокКолеса" раз.
При нажатом колесе мыши каждый щелчок интерпретируется как PgUP или PgDWN, нажатая "СтраницНаЩелчокКолеса" раз.
Для работы класса нужны компоненты 1С++ и FormEx.
В форме журнала следует написать:

Код
Выбрать все
Перем БыстроеКолесоМыши Экспорт;
...
Процедура ПриПрокруткеКолесаМыши(Флаг,X,Y,ФСО,Направление)
    БыстроеКолесоМыши.ПриПрокруткеКолесаМыши(Флаг,X,Y,ФСО,Направление);
КонецПроцедуры
...
БыстроеКолесоМыши = СоздатьОбъект("БыстроеКолесоМыши");
 



PS: У меня все это добавлено в класс-перехватчик событий формы журналов Улыбка

« Последняя редакция: 14. Сентября 2009 :: 11:21 - slider26 »  
Наверх
 
IP записан
 
slider26
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 256
Зарегистрирован: 01. Июня 2006
Re: Класс "БыстроеКолесоМыши"
Ответ #1 - 14. Сентября 2009 :: 02:52
Печать  
Код
Выбрать все
Перем СервисРасшФормы;

Перем стр_ПострочныйСкроллингВверх;
Перем стр_ПострочныйСкроллингВниз;
Перем стр_ПостраничныйСкроллингВверх;
Перем стр_ПостраничныйСкроллингВниз;

Перем СтрокНаЩелчокКолеса Экспорт;
Перем СтраницНаЩелчокКолеса Экспорт;


Функция Сам(Конт) Возврат Конт; КонецФункции


Процедура СформироватьСтрСкроллингаСтрок()

	Перем н_стр;

	стр_ПострочныйСкроллингВверх = "";
	стр_ПострочныйСкроллингВниз = "";

	Для н_стр=1 По СтрокНаЩелчокКолеса Цикл
		стр_ПострочныйСкроллингВверх = стр_ПострочныйСкроллингВверх + "{UP}";
		стр_ПострочныйСкроллингВниз = стр_ПострочныйСкроллингВниз + "{DOWN}";
	КонецЦикла;

КонецПроцедуры


Процедура СформироватьСтрСкроллингаСтраниц()

	Перем н_стр;

	стр_ПостраничныйСкроллингВверх = "";
	стр_ПостраничныйСкроллингВниз = "";

	Для н_стр=1 По СтраницНаЩелчокКолеса Цикл
		стр_ПостраничныйСкроллингВверх = стр_ПостраничныйСкроллингВверх + "{PGUP}";
		стр_ПостраничныйСкроллингВниз = стр_ПостраничныйСкроллингВниз + "{PGDN}";
	КонецЦикла;

КонецПроцедуры


Процедура Конструктор()

    СервисРасшФормы = СоздатьОбъект("Сервис");

	СтрокНаЩелчокКолеса = 3;
	СтраницНаЩелчокКолеса = 1;

	СформироватьСтрСкроллингаСтрок();
	СформироватьСтрСкроллингаСтраниц();

	//----Далее включаем перехват мыши, если отключен----

КонецПроцедуры


Процедура ПриЗаписи_СтрокНаЩелчокКолеса(Значение)

	Перем ВремЗнач;

	ВремЗнач = Цел(Число(Значение));
	ВремЗнач = ?(ВремЗнач<0,-ВремЗнач,ВремЗнач);

	Если (СтрокНаЩелчокКолеса <> ВремЗнач) Тогда
		СтрокНаЩелчокКолеса = ВремЗнач;
		СформироватьСтрСкроллингаСтрок();
	КонецЕсли;

КонецПроцедуры //ПриЗаписи_СтрокНаЩелчокКолеса


Процедура ПриЗаписи_СтраницНаЩелчокКолеса(Значение)

	Перем ВремЗнач;

	ВремЗнач = Цел(Число(Значение));
	ВремЗнач = ?(ВремЗнач<0,-ВремЗнач,ВремЗнач);

	Если (СтраницНаЩелчокКолеса <> ВремЗнач) Тогда
		СтраницНаЩелчокКолеса = ВремЗнач;
		СформироватьСтрСкроллингаСтраниц();
	КонецЕсли;

КонецПроцедуры //ПриЗаписи_СтраницНаЩелчокКолеса


Процедура Деструктор()

	//----Далее отключаем перехват мыши, если больше не нужен----

КонецПроцедуры


Процедура ПриПрокруткеКолесаМыши(Флаг,X,Y,ФСО,Направление) Экспорт

	ФСО=0;

	Если (Флаг = 0) Тогда
		Если (Направление > 0) Тогда
			СервисРасшФормы.ЭмулироватьКлавиатуру(стр_ПострочныйСкроллингВверх);
		ИначеЕсли (Направление < 0) Тогда
			СервисРасшФормы.ЭмулироватьКлавиатуру(стр_ПострочныйСкроллингВниз);
		КонецЕсли;
	Иначе
		Если (Направление > 0) Тогда
			СервисРасшФормы.ЭмулироватьКлавиатуру(стр_ПостраничныйСкроллингВверх);
		ИначеЕсли (Направление < 0) Тогда
			СервисРасшФормы.ЭмулироватьКлавиатуру(стр_ПостраничныйСкроллингВниз);
		КонецЕсли;
	КонецЕсли;

КонецПроцедуры

 

  
Наверх
 
IP записан
 
slider26
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 256
Зарегистрирован: 01. Июня 2006
Re: Класс "БыстроеКолесоМыши"
Ответ #2 - 14. Сентября 2009 :: 02:59
Печать  
Единственный минус - необходимость перехвата мыши в форме (выполнение кода интерпретатором 1С)
ИМХО - оптимально бы было запихать код этого класса в dll и перехватить процедуру на уровне машинных кодов. Это было бы гораздо быстрее.
А еще лучше перехватывать не вращение колеса мыши, а саму процедуру скроллинга формы журнала.
Допустим, создаем в форме объект, устанавливаем параметры и все работает... Ну либо параметры для компоненты устанавливаются Улыбка
Может уважаемые разработчики 1С++ возьмутся написать такой полезный встроеный класс для 1С++? Он очень сильно снимает нагрузку на сервер БД.
Или я чего-то не знаю, и компонента такая уже есть?
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать