Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема ПриДвиженииМыши() и тп. (число прочтений - 1409 )
recop
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 247
Местоположение: Калуга
Зарегистрирован: 06. Июня 2017
Пол: Мужской
ПриДвиженииМыши() и тп.
21. Января 2019 :: 08:24
Печать  
Вопрос к уважаемому Альфу:
Предопределенные процедуры работы с мышкой имеют один существенный недостаток:  вызываются только тогда, когда мышь находится в пределах активной формы. Что приводит к тому, что в определенных условиях не отрабатывает необходимое действие при потере атрибутом формы фокуса. Это происходит при резком скачке мыши за пределы формы. Как это можно обойти?
Очень интересно, это особенности 1с или Вы намеренно ввели это ограничение?
  
Наверх
 
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1537
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ПриДвиженииМыши() и тп.
Ответ #1 - 21. Января 2019 :: 09:40
Печать  
Если я правильно понимаю вопрос, то это штатная работа винды с событиями. Можно попробовать использовать глобальные обработчики событий от мыши.
  

FormEx developer
Наверх
www  
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 631
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: ПриДвиженииМыши() и тп.
Ответ #2 - 21. Января 2019 :: 16:08
Печать  
С мышью все очень забавно и использовать глобальные события видимо не получится.
Т.е. тыкаем вне формы - в ПриНажатииЛевойКнопки получаем глобальные координаты, тыкаем в форме получаем локальные координаты формы.
В принципе поведение mfc логично - какой объект тыкаем, то у того координаты и получаем.
Иначе была бы жуткая жуть - все существующие объекты получали бы все события мыши, которые к ним не относятся и это была бы DDoS атака на элементы управления Подмигивание

  
Наверх
www  
IP записан
 
recop
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 247
Местоположение: Калуга
Зарегистрирован: 06. Июня 2017
Пол: Мужской
Re: ПриДвиженииМыши() и тп.
Ответ #3 - 23. Января 2019 :: 06:43
Печать  
Djelf писал(а) 21. Января 2019 :: 16:08:
...
В принципе поведение mfc логично - какой объект тыкаем, то у того координаты и получаем.
...

Тыкать бог с ним, а вот при движении мыши было бы полезно знать состояние, что мышь покинула пределы формы.
  
Наверх
 
IP записан
 
recop
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 247
Местоположение: Калуга
Зарегистрирован: 06. Июня 2017
Пол: Мужской
Re: ПриДвиженииМыши() и тп.
Ответ #4 - 21. Февраля 2019 :: 10:26
Печать  
Как получить координаты курсора мыши не использую RUN, или генерировать системный вызов  ПриДвиженииМыши()  не меняя координаты курсора?
  
Наверх
 
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 850
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: ПриДвиженииМыши() и тп.
Ответ #5 - 21. Февраля 2019 :: 10:33
Печать  
Код (C++)
Выбрать все
//*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* Made by AAA
Процедура ПолучитьКоординатыМыши(X,Y) Экспорт
	Перем Wrapper,HEAP_ZERO_MEMORY,pRECT,pClassName;
	Wrapper = CreateObject("DynamicWrapperX");
	Wrapper.Register("USER32.DLL", "GetCursorPos", "i=p", "r=l");
	Wrapper.Register("kernel32.DLL","HeapAlloc","i=lll","r=l");
	Wrapper.Register("kernel32.DLL","GetProcessHeap","r=l");
	hHeap 		= Wrapper.GetProcessHeap();
	HEAP_ZERO_MEMORY=8;
	pClassName 	= Wrapper.HeapAlloc(hHeap, HEAP_ZERO_MEMORY, 256);
	pRECT = Wrapper.HeapAlloc(hHeap, 0, 16);
	Wrapper.GetCursorPos(pRECT);
	x = Wrapper.NumGet(pRECT, 0);
	y = Wrapper.NumGet(pRECT, 4);
КонецПроцедуры 


  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 850
Местоположение: Одесса
Зарегистрирован: 07. Декабря 2007
Пол: Мужской
Re: ПриДвиженииМыши() и тп.
Ответ #6 - 21. Февраля 2019 :: 10:34
Печать  
Ну, и до кучи:
Код (C++)
Выбрать все
//*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* Made by AAA
Процедура УстановитьКоординатыМыши(X,Y) Экспорт
	Перем Wrapper;
	Wrapper = CreateObject("DynamicWrapperX");
	Wrapper.Register("USER32.DLL", "SetCursorPos", "i=ll", "f=s", "r=l");
	Wrapper.SetCursorPos(X,Y);
КонецПроцедуры 

  

1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
Наверх
IP записан
 
recop
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 247
Местоположение: Калуга
Зарегистрирован: 06. Июня 2017
Пол: Мужской
Re: ПриДвиженииМыши() и тп.
Ответ #7 - 21. Февраля 2019 :: 18:22
Печать  
Супер! Это тоже нужно! А координаты относительно рабочей области формы? Без пересчета. Ведь я не смогу постоянно пересчитывать координаты атрибута, например, после перемещения формы.
« Последняя редакция: 21. Февраля 2019 :: 20:17 - recop »  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать