powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Mouse move асинхронное выполнение
8 сообщений из 8, страница 1 из 1
Mouse move асинхронное выполнение
    #36489571
_usa__83_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
День добрый!

Вот возникла такая необходимость двинуть указатель мыши посредством mouse move....
но вот беда, данная команда выполняется асинхронно и следующая инструкция в коде выполняется
еще до окончания mouse move... как сделать так чтобы выполнение программы приостанавливалось до
завершения конкретной инструкцией?
...
Рейтинг: 0 / 0
Mouse move асинхронное выполнение
    #36489637
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FoxPro - однопоточное приложение. Необходимо прилагать специальные усилия, чтобы заставить выполняться команды асинхронно. По умолчанию, это невозможно.

Проблема в том, что хотя Вы и дали команду на перемещение мыши, но эта команда не может быть выполнена немедленно, поскольку в данный момент выполняется текущая процедура. Поэтому процесс перемещения мыши откладывается в стек событий. Ставится в очередь на исполнение. И исполняется только после завершения исполнения текущей процедуры.

Вам надо как раз заставить выполниться мышиное событие немедленно. Именно что асинхронно. До завершения выполнения текущей процедуры.

В старых версиях FoxPro это делалость просто задержкой

Код: plaintext
1.
2.
MOUSE MOVE ...
=Inkey( 0 . 1 )

В новых версиях FoxPro попробуйте использовать команду DOEVENTS

Код: plaintext
1.
2.
MOUSE MOVE ...
DOEVENTS FORCE
...
Рейтинг: 0 / 0
Mouse move асинхронное выполнение
    #36494806
_usa__83_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ,

Да, doevents force отрабатывает, но вот дальше ....
у меня в коде заместо mouse move ..., mouse click at ....., так вот клик не отрабатывает, тоесть даже если выдать do events после mouse click at .... то прежде чем выполнится click (в обработчике clicka соответствующего объекта есть код) успевает выполниться следующая инструкция do FORm...
...
Рейтинг: 0 / 0
Mouse move асинхронное выполнение
    #36494939
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А Вы не можете напрямую обратится к методу Click() объекта вне процесса перемещения мыши?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
* Получаем ссылку на объект по нужным координатам
LOCAL loObject
loObject = SYS( 1270 , nXCoord, nYCoord)

* Если по координатам есть объект и у него есть событие Click
if TYPE("loObject") = "O" AND PEMSTATUS(loObject, "Click",  5 )
	* то выполняем это событие
	loObject.Click()
endif

В этом случае перемещение мыши вообще не нужно. Соответственно, нет необходимости использовать DOEVENTS.
...
Рейтинг: 0 / 0
Mouse move асинхронное выполнение
    #36496085
_usa__83_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ,

Ок попробуем...
...
Рейтинг: 0 / 0
Mouse move асинхронное выполнение
    #36506806
_usa__83_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ,

Попробовал, - не получилось .... Вернулся к идее с MOUSE ...
У меня собственно задача следующая:
есть treeview, необходимо чтобы при нажатии на правую кнопку мыши (по узлу) происходило
в действительности нажатие левой кнопки. Эт для того чтобы и правой и левой выбирался узел.

В обработчике mousedown, если кнопка была правая я пишу MOUSE AT CLICK и DO EVENTS FORCE.

Что самое замечательное, далее (в коде обработчика mouse down идет DO FORM ..., которая
модальная и которая при появлении закрывает область того самого treeview...

В итоге, получается что в 50% случаев все отрабатывает нормально, а в других 50% происходит
нажатие на кнопки уже той формы что вызывается после do events force
...
Рейтинг: 0 / 0
Mouse move асинхронное выполнение
    #36506811
_usa__83_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_usa__83_,

Усе, малость подумал, все решилось - код обработчика MOUSEDOWN и CLICK перенес в MOUSEUP и все
так как хотелось, при нажатии левой - просто выбирается узел, при нажатии правой - вызывается форма...
...
Рейтинг: 0 / 0
Mouse move асинхронное выполнение
    #36506949
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если бы Вы сразу описали задачу, а не выбранный Вами способ решения, то все решилось бы еще быстрее.

Для выбора узла в TreeView надо не мышиные события "дергать", а использовать идентификацию узла по координатам. Это делается через метод TreeView.HitTest(). Сделайте поиск в данном форуме по ключевым словам TreeView и HitTest. Найдете много интересного.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Mouse move асинхронное выполнение
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]