Как определить: отжата или нажата кнопка автопрокрутки и в случае, если она нажата - отжать !? - страница 4

 
Zhunko:

Если Лео был внимательным, то по ссылке на библиотеку лежит мой WinUser32.mqh. Там все команды есть и функции необходимые. Ничего экспортировать не надо.


33017 - снять/поставить автопрокрутку;
или что-то другое ?
 
LEOK:

33017 - снять/поставить автопрокрутку;
или что-то другое ?
Spy++ в помощь.
Берите информацию прямо из источника.
 
LEOK:

33017 - снять/поставить автопрокрутку;
или что-то другое ?
Для управления да. Для получения состояния нужны свойства графика.
 

Я лично так и не понял, в чём проблема использования TB_GETSTATE. О какой ещё активности окна шла речь? Это обычное оконное сообщение, посылаемое контролу, точно так же как например WM_GETTEXT, BM_GETSTATE и т.д. Всегда пользовался этими сообщениями - никаких проблем не возникало. И приложение точно также получает инфу с контролов с помощью этих сообщений.

А активно окно или нет - не имеет никакого значения.

 
Meat:

Я лично так и не понял, в чём проблема использования TB_GETSTATE. О какой ещё активности окна шла речь? Это обычное оконное сообщение, посылаемое контролу, точно так же как например WM_GETTEXT, BM_GETSTATE и т.д. Всегда пользовался этими сообщениями - никаких проблем не возникало. И приложение точно также получает инфу с контролов с помощью этих сообщений.

А активно окно или нет - не имеет никакого значения.

Эта панель работает только с активным графиком. Что будет, если за момент до посылки сообщения активность окна изменится? Станет активно другое окно графика. Соответственно, получите положение кнопки для другого окна, а не своего. Как синхронизировать в этом случае активность окна, для которого получаем положение кнопки, с посылаемым сообщением? Если этого не сделать, будет до фига неожиданных ошибок. Даже с DLL это не очевидно.

Проще и надёжнее через свойства графика получить.

 
Zhunko:

Эта панель работает только с активным графиком. Что будет, если за момент до посылки сообщения активность окна изменится? Станет активно другое окно графика. Соответственно, получите положение кнопки для другого окна, а не своего. Как синхронизировать в этом случае активность окна, для которого получаем положение кнопки, с посылаемым сообщением? Если этого не сделать, будет до фига неожиданных ошибок. Даже с DLL это не очевидно.

Проще и надёжнее через свойства графика получить.


Приведите, плз., пример использования (код): как через свойства графика это можно получить ?!
 
LEOK:
Приведите, плз., пример использования (код): как через свойства графика это можно получить ?!
Имитировать команду на открытие свойств графика.
Дождаться модального диалога.
Найти его.
Найти нужный элемент.
Закрыть модальный диалог.

Ну и вопросы у вас...
 
Zhunko:

Эта панель работает только с активным графиком. Что будет, если за момент до посылки сообщения активность окна изменится? Станет активно другое окно графика. Соответственно, получите положение кнопки для другого окна, а не своего. Как синхронизировать в этом случае активность окна, для которого получаем положение кнопки, с посылаемым сообщением? Если этого не сделать, будет до фига неожиданных ошибок. Даже с DLL это не очевидно.

Проще и надёжнее через свойства графика получить.

Ну можно сначала принудительно активировать требуемый график. А также для надёжности проверить название главного окна терминала. В нём должно содержаться название требуемого графика. Но впрочем я не настаиваю, наверное ваш вариант всё же удобней, т.к. там не потребуется переключать график. Но зато будет мелькать окошко свойств графика :)

 
Meat:

Ну можно сначала принудительно активировать требуемый график. А также для надёжности проверить название главного окна терминала. В нём должно содержаться название требуемого графика. Но впрочем я не настаиваю, наверное ваш вариант всё же удобней, т.к. там не потребуется переключать график. Но зато будет мелькать окошко свойств графика :)

Конечно, можно активировать. Но, как синхронизировать? Сбить активность окна может любая программа или сам пользователь в любой момент. Как решить это? Очень неудобный способ.

Да. Окошко мелькает, но очень быстро. Если комп не загружен, то почти незаметно.

LEOK:

Приведите, плз., пример использования (код): как через свойства графика это можно получить ?!

Посмотрите в моём WinUser32.mqh. Там есть коды команд. Можно не искать в Spy. Остальное Вы и так знаете.

Андрей правильно написал:

jartmailru:
Имитировать команду на открытие свойств графика.
Дождаться модального диалога.
Найти его.
Найти нужный элемент.
Закрыть модальный диалог.
Только прежде, чем найти элемент, надо будет вкладку переключить.
 
Meat:

Ну можно сначала принудительно активировать требуемый график. А также для надёжности проверить название главного окна терминала. В нём должно содержаться название требуемого графика. Но впрочем я не настаиваю, наверное ваш вариант всё же удобней, т.к. там не потребуется переключать график. Но зато будет мелькать окошко свойств графика :)

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