|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
22.05.2021, 02:10 | #1 |
Регистрация: 05.01.2019
Сообщений: 5
|
Изменение свойств Controls вызванной на экран UserForm при перемещении пользователем курсора мыши по экрану
Здравствуйте!
Никак не могу найти ошибку в своем коде в силу недостаточности уровня знаний в понимании правил использования обратного вызова с использованием API функций. Начнем по порядку. Итак, есть задача - изменять для визуальной наглядности пользователю состояние свойств объектов (Controls) загруженной и выведенной на экран формы (UserForm) при перемещении пользователем мыши по экрану окна. Возьмем для простоты простейшую форму, содержащую объект Image. Желаемое. Если пользователь навел курсор мыши на форму (курсор мыши внутри координат формы), то фон Image зеленый. Если пользователь перевел курсор мыши за пределы координат формы , то фон Image становится красный. Все это я пытаюсь реализовать в 64-bit операционной системе с установленной версией Office, использующего 64-разрядную версию VBA. Создавая различного рода запросы в поисковике для решения своей задачи я выяснил, что в помощь мне функция API TRACKMOUSEEVENT. И даже нашел практический пример по ссылке: http://rusproject.narod.ru/winapi/t/trackmouseevent.html Изучив его, я понял, что мне его необходимо адаптировать в свою операционную среду. И тут снова мне в помощь пришел найденный справочный материал: https://codekabinett.com/rdumps.php?...ion-vba-64-bit Изучив на его основании типы аргументов необходимых мне API функций, я адаптировал их декларацию под версию VBA 64-bit. При проверке компиляции кода в среде VBA.Project все хорошо. Однако, результат выполнения кода не дает нужного результата. Более того, при пошаговом выполнении наблюдается серьезный сбой, когда приложение Excel просто перезагружается или даже закрывается. И это происходит именно на этапе срабатывания функции обратного вызова. Теперь конкретно о коде. Вот код основного модуля Код:
Я знаю, что у UserForm и его Controls нет свойства hwnd, поэтому мне опять же в помощь пришел справочный материал: https://colinlegg.wordpress.com/2016...userforms-vba/, изучив который я научился считывать дескриптор пользовательской формы. Соответственно, код класса оговоренной для примера формы приобрел следующий вид: Код:
При пошаговом исполнении при обращении к функции WindowProc, я заметил, что параметр uMsg вообще даже близко не сопоставляется с установленной константой WM_MOUSELEAVE. При этом происходит рекурсивное обращение к указанной функции, параметр uMsg меняется каждый раз, а после раза 4-5 рекурсивного вызова, приложение просто перезапускается или выгружается. Уважаемые знатоки темы, подскажите, где у меня ошибка и/или чего мне не хватает (кроме ума и знаний, тут понятно, шутки будут неуместны). |
22.05.2021, 09:26 | #2 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
а файл у вас есть? с формой и имиджем в ней, народ крайне ленивый и никто не станет это собирать, т.е. нету файла - нет решения (не факт что оно будет при наличии файла, но без файла - шансы вообще ничтожны)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
|
22.05.2021, 14:44 | #3 |
Регистрация: 05.01.2019
Сообщений: 5
|
Вообще без проблем.
Выкладываю файл описанного примера со стопроцентным идентичным выложенном в теме кодом. |
29.05.2021, 06:49 | #4 |
Новичок
СтарожилДжуниор
Регистрация: 05.02.2008
Сообщений: 9,487
|
см.вложение
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
Последний раз редактировалось IgorGO; 30.05.2021 в 01:51. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Сбрасывается состояние мыши при программном перемещении курсора. Drag&drop | Yuran | Общие вопросы Delphi | 1 | 26.07.2016 14:15 |
Вывести поточные координаты курсора мыши относительно формы и экрана, при нажатии на кнопку реверсивное изменение кнопок мыши C++ | carrie bradshaw | Помощь студентам | 0 | 06.02.2014 00:21 |
Перемещение курсора мыши по экрану | KoBaL | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 3 | 04.10.2013 22:05 |
Перемещение курсора мыши по экрану | Илья2204 | Общие вопросы C/C++ | 1 | 08.12.2010 13:34 |
Определение X и Y координат PaintBox при перемещении курсора мыши | Vladimir K. | Общие вопросы Delphi | 3 | 04.01.2007 10:45 |