Скачать MetaTrader 5

как c помощью WINAPI добавить объект на график ?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Интересуешься социальным трейдингом? Прочти соответствующую статью!
Александр
1081
Александр 2011.10.16 20:48 

Задача примерно такая: Советник анализирует несколько инструментов и ТФ и при выполнении определенных условий открывает новое окно с инструментом и ставит в этом окне текстовые метки (а возможно и графические построения будут). Текстовая метка, как наверно все знают, ставится следующим образом, сначала на панели мышкой кликается соответствующая иконка потом перемещается на график и еще одним кликом мыши, вызываем окно с параметрами объекта.

Так вот проблема у меня в следующем. Окно открывается успешно, объект для вставки выбирается успешно, мышка на графике кликается, но окно с параметрами не появляется.

Кто знает в чем проблема, подскажите.

Используются две библиотеки. Все дополнительные файлы можно взять тут (спасибо Вадиму) - https://www.mql5.com/ru/code/9951

Вот код и мои попытки.

#include <WinUser32.mqh>
#include <ServicesMT4.mqh>

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
void start() {
   int hwnd,num;
   string symb="1234567";
//===============================================
   num=ServiceLineBySymbol("EURUSD");
   hwnd=ServiceOpenChartByNumber(num,symb,7);   // открываем окно
   Sleep(1000);
   ServiceSetActiveChart(hwnd);                 // делаем его активным
   PostMessageA(hwnd,WM_COMMAND,33253,0);       // выбираем текстовую метку
   Sleep(1000);
   //SetActiveWindow(hwnd);
   //SetForegroundWindow(hwnd);
   SetCursorPos(500,300);                       // позиционируем курсор
   Sleep(1000);
   //SetCapture(hwnd);
   //SetFocus(hwnd);
   //PostMessageA(hwnd,WM_SETFOCUS,0,0);
   PostMessageA(hwnd,WM_LBUTTONDOWN,0,0);      // нажимаем левую клавишу мышки
   Sleep(50);
   PostMessageA(hwnd,WM_LBUTTONUP,0,0);
   
   return;
}
//+------------------------------------------------------------------+
Алексей Тарабанов
7214
Алексей Тарабанов 2011.10.16 20:56  
Talex:

Кто знает в чем проблема, подскажите.


Ну, я знаю.

По левой кнопке окно и не должно открываться ...

Александр
1081
Александр 2011.10.16 22:07  
А подсказать можете, как открыть окно с параметрами?
Vadim Zhunko
5226
Vadim Zhunko 2011.10.16 23:14  

Можно проще. В настроках МТ4 установить галку "Показывать свойства после создания". Тогда само открываться будет.

Саш, тебе срочно, а то могу сделать функцию для тебя в библиотеку? :-))

Александр
1081
Александр 2011.10.17 07:23  
Привет Вадим. Не открывается с галкой, попробовал. За функцию спасибо, буду ждать. Но подсказка мне не помешает, как вызвать это окно.
Alexey Navoykov
3988
Alexey Navoykov 2011.10.17 08:48  

Так а объект появляется на графике после кликанья? Возможно ты кликаешь не в то окно. И кстати совершенно необязательно делать такие огромные паузы.

Александр
1081
Александр 2011.10.17 09:12  
Ни объект, ни окно с параметрами не появляются. Кликал во вновь созданное окно, куда должен встать объект (хотя и в другие пробовал). А такие огромные паузы для тех, кто захочет посмотреть что происходит на графике.
Alexey Navoykov
3988
Alexey Navoykov 2011.10.17 09:16  

И кстати, здесь даже если и сработает это кликанье, то оно будет в верхний левый угол окна с хэндлом hwnd, а вовсе не в точку с курсором. Ты ведь тут совместил совершенно разные вещи. Если тебе нужно просто кликнуть в точку экрана под курсором, то зачем ты посылаешь сообщение конкрентному окну? Тебе нужно просто произвести кликанье в этой точке с помощью функции mouse_event, проверив перед этим, чтобы точка находилась в пределах окна. Если же ты хочешь кликнуть в определённую точку конкретного окна, то тебе для этого совершенно необязательно перемещать курсор. Достаточно в сообщении WM_LBUTTONDOWN и WM_LBUTTONUP в качестве одного из параметров указать координаты этой точки в координатной системе данного окна.

Александр
1081
Александр 2011.10.17 09:59  
Meat:

.... Достаточно в сообщении WM_LBUTTONDOWN и WM_LBUTTONUP в качестве одного из параметров указать координаты этой точки в координатной системе данного окна.


Я пробовал, но не знаю корректно ли передавал координаты... Примеров не нашел, а компилятор не ругался. Пробовал примерно так:

PostMessageA(hwnd,WM_LBUTTONDOWN,0,(100,100));
Александр
1081
Александр 2011.10.17 10:01  
P.S. А про mouse_event, спасибо, я что-то про нее и забыл, попробую.
Alexey Navoykov
3988
Alexey Navoykov 2011.10.17 10:36  

Всё описано в MSDN. http://msdn.microsoft.com/en-us/library/ms645607(VS.85).aspx

Кстати в mouse_event тоже ведь указываются координаты, так что перемещение курсора вообще не нужно.

12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий