Сначала бы неплохо определиться, в каком именно виде необходимо получение об информации о возникновении события: напрямую или опосредовано?
Если исходить из того, что написание собственной DLL не рассматривается, то может тогда и от API отказаться? Если косвенный способ подходит, то:
Вешаем на график зацикленный скрипт, который проверяет индекс первого видимого бара в окне - WindowFirstVisibleBar (можно вместе с количеством баров в окне - WindowBarsPerChart). Если отличаются от предыдущего значения, то совершались действия с графиком. Правда, в этом случае не только колесико мыши могло быть причиной (изменение масштаба по времени - "+", "-", нажатие Home или End, прямой переход к нужной дате).
В любом случае, пока мало информации для того, чтобы понять, что именно требуется от определения события кручения колесика мыши. Тогда можно и методы подсказать.
P.S. Ну а если нужен доступ к функции обработки окна, то это SetWindowLongPtr (см. msdn). Но без DLL тут не обойтись, т.к. нельзя назначить новую процедуру обработки сообщений, расположенную в MQL-коде.
Мысль контролировать скроллинг чарта, была. Но не комильфо....
Нет, нужно определить событие прокрутки колеса.
В любом случае, пока мало информации для того, чтобы понять, что именно требуется от определения события кручения колесика мыши. Тогда можно и методы подсказать.
что именно требуется?
список крутить конечно. что же еще? :)
Может поможет
нет. там хук. в MQL незнамо как адрес функции получить.
Я у себя так сделал:
- пользователь кликает закрыть окно МТ
- я спрашиваю: вы поменяли индикатор- сохранить? Да Нет Отмена
При отмене никто никуда не выходит.
Да- сохраняем и выходим, нет- не сохраняем и выходим.
Примитивно.
Хуки тут ни при чём, правда.
> Речь идет о виндовых DLL. Написание своей пока что не рассматривается.
Успехов...
На окно терминала вешать кастомную процедуру обработки событий с перехватом- и всё.
то есть речь про SetWindowLong ?
что именно требуется?
список крутить конечно. что же еще? :)
Если список (CListCtrl) - свой объект, то в чем проблема? События от мыши получает именно список, а не окно Meta Trader.
Или речь идет о списке, составленном на основе графических объектов MT4?
Если список (CListCtrl) - свой объект, то в чем проблема? События от мыши получает именно список, а не окно Meta Trader.
Или речь идет о списке, составленном на основе графических объектов MT4?
Если нет проблемы - укажите, пожалуйста, как определить ФАКТ смещения колесика на мышке. Когда указатель оной мышки находится в окошке MT4. А то очень интересненько :)
Само собою,- средствами Windows.
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
После штудирования инета определился с тремя возможностями:
1. Обработка WM_MOUSEWHEEL
2. Обработка WM_INPUT
3. Получение данных мышки из DirectInput.
В первом варианте предполагается наличие окна, где это событие обрабатывается. К сожалению не знаю как добраться к очереди сообщений окна терминала из MQL, поэтому этот вариант отпал. http://www.rsdn.ru/article/baseserv/hookdll.xml
Второй вариант тоже предполагает окно, но была надежда, что обращаясь к функции GetRawInputBuffer, смогу получить данные, минуя терминал.
У меня получилось воспользоваться всеми функциями регистрации и получения информации. А именно:
GetRawInputDeviceInfo
GetRawInputDeviceList
GetRegisteredRawInputDevices
RegisterRawInputDevices
Но функция GetRawInputBuffer, которая нужна, не заработала. Буфер пуст, данные в него не захватываются.
С третьим вариантом к сожалению тоже не получилось, так как не знаю как получить экземпляр интерфейса LPDIRECTINPUTDEVICE8 / LPDIRECTINPUT8.
Знатоки, что посоветуете?