PostMessageA(WindowHandle(Symbol(), Period()), WM_COMMAND, 33048,0); // вызов свойств эксперта
Спасибо!
А индикатора? :-)
Список индикаторов представляет собой TreeView элемент (иерархическое дерево). Доступ к узлам с помощью WinAPI возможен.
Однако из-за отсутствия поддержки структур в MQL4 получить информацию об узле дерева (н-р, текст) невозможно. Соответственно
нет возможности определить какой индикатор закреплен за каждым узлом.
Задача реализуема, если точно известно, в какой позиции списка (с учетом названия подокон) находится интересуемый индикатор.
P.S. Вызов окна "Список индикаторов"
PostMessageA(WindowHandle(Symbol(),Period()),WM_COMMAND,35419,0);
Список индикаторов представляет собой TreeView элемент (иерархическое дерево). Доступ к узлам с помощью WinAPI возможен.
Однако из-за отсутствия поддержки структур в MQL4 получить информацию об узле дерева (н-р, текст) невозможно. Соответственно
нет возможности определить какой индикатор закреплен за каждым узлом.
Задача реализуема, если точно известно, в какой позиции списка (с учетом названия подокон) находится интересуемый индикатор.
P.S. Вызов окна "Список индикаторов"
Спасибо! Вы очень любезны!
Есть три вопроса:
1. Как это сделать, если всё известно?
2. Может выложите или на почту все коды пришлёте? :-) Весьма ценная информация!
Спасибо! Вы очень любезны!
Есть три вопроса:
1. Как это сделать, если всё известно?
2. Может выложите или на почту все коды пришлёте? :-) Весьма ценная информация!
// Вызов окна свойств конкретного индикатора. #property show_inputs #include <WinUser32.mqh> extern int iPosition = 1; //номер позиции индикатора в списке (с учетом названия подокон) #import "user32.dll" int GetParent(int hWnd); int GetLastActivePopup(int hWnd); int GetDlgItem(int hDlg, int nIDDlgItem); #import #define VK_HOME 0x24 #define VK_DOWN 0x28 #define TVM_GETCOUNT 0x1105 // Возвращает дескриптор основного окна терминала int GetOwnedWindow() { int hWnd = WindowHandle(Symbol(),Period()); int hOwnedWnd = 0; while(!IsStopped()) { hWnd = GetParent(hWnd); if(hWnd==0) break; hOwnedWnd = hWnd; } return(hOwnedWnd); } // Вызывает окно "Список индикаторов" и возвращает его дескриптор int GetListDialog(int hOwnedWnd) { int hDlgWnd; PostMessageA(hOwnedWnd,WM_COMMAND,35419,0); //вызываем окно "Список индикаторов" Sleep(200); hDlgWnd = GetLastActivePopup(hOwnedWnd); //определяем дескриптор return(hDlgWnd); } //+------------------------------------------------------------------+ //| Основная функция скрипта | //+------------------------------------------------------------------+ int start() { int hParent, hDlg, hTree; int nTreeCount; hParent = GetOwnedWindow(); //получаем дескриптор основного окна терминала if(hParent!=0) { hDlg = GetListDialog(hParent); //вызываем окно "Список индикаторов" hTree = GetDlgItem(hDlg,0x48C); //находим список индикаторов nTreeCount = SendMessageA(hTree,TVM_GETCOUNT,0,0); //определяем длину списка PostMessageA(hTree,WM_KEYDOWN,VK_HOME,0); //верхняя строка списка for(int i=1; i<nTreeCount; i++) //перебираем весь список { PostMessageA(hTree,WM_KEYDOWN,VK_DOWN,0); //смещаемся на следующую позицию списка if(iPosition==i) //достигли позиции интересуемого индикатора { PostMessageA(hDlg,WM_COMMAND,0x48B,GetDlgItem(hDlg,0x48B)); //вызываем окно свойств break; //прерываем цикл } } } return(0); }
3. Научите, как их самому получать без катастрофических последствий?
Что конкретно Вас интересует?
Большое СПАСИБО за пример использования фукций из "user32.dll"!!!
Имел ввиду, как получить коды команд API МТ4?
PostMessageA(handle,WM_COMMAND,?????,0);Там, где знаки вопросов.
Это у меня в коллекции есть. Могли бы заметить мою благодарность автору в той теме.
Ilnur выкладывает команды, которых нет в том списке.
Со скриптом разобрался.
Интересно, что подокно в списке индикаторов тоже является элементом списка.
Ilnur, я понял, что способа работать с именем индикатора в этом списке нет?
Однозначно нет или, что-нибудь можно придумать?
Ещё один вопрос.
Как переинициализировать все индикаторы окна за один раз?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования