| / | Форум |
|
Talex
16.10.2011 22:48
Задача примерно такая: Советник анализирует несколько инструментов и ТФ и при выполнении определенных условий открывает новое окно с инструментом и ставит в этом окне текстовые метки (а возможно и графические построения будут). Текстовая метка, как наверно все знают, ставится следующим образом, сначала на панели мышкой кликается соответствующая иконка потом перемещается на график и еще одним кликом мыши, вызываем окно с параметрами объекта. Так вот проблема у меня в следующем. Окно открывается успешно, объект для вставки выбирается успешно, мышка на графике кликается, но окно с параметрами не появляется. Кто знает в чем проблема, подскажите. Используются две библиотеки. Все дополнительные файлы можно взять тут (спасибо Вадиму) - http://codebase.mql4.com/ru/7085 Вот код и мои попытки. #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; } //+------------------------------------------------------------------+ |
|
Бесплатная Groupware для групп разработчиков Установите систему групповой работы TeamWox и объедините усилия всех разработчиков. Это поможет вашей команде работать быстрее и организованнее. Благодаря TeamWox станет намного проще ставить задачи и контролировать их выполнение. |
|
tara
16.10.2011 22:56
Talex:
Кто знает в чем проблема, подскажите.
По левой кнопке окно и не должно открываться ... |
|
Talex
17.10.2011 00:07
А подсказать можете, как открыть окно с параметрами?
|
|
Zhunko
17.10.2011 01:14
Можно проще. В настроках МТ4 установить галку "Показывать свойства после создания". Тогда само открываться будет. Саш, тебе срочно, а то могу сделать функцию для тебя в библиотеку? :-)) |
|
Talex
17.10.2011 09:23
Привет Вадим. Не открывается с галкой, попробовал. За функцию спасибо, буду ждать. Но подсказка мне не помешает, как вызвать это окно.
|
|
Meat
17.10.2011 10:48
Так а объект появляется на графике после кликанья? Возможно ты кликаешь не в то окно. И кстати совершенно необязательно делать такие огромные паузы. |
|
Talex
17.10.2011 11:12
Ни объект, ни окно с параметрами не появляются. Кликал во вновь созданное окно, куда должен встать объект (хотя и в другие пробовал). А такие огромные паузы для тех, кто захочет посмотреть что происходит на графике.
|
|
Meat
17.10.2011 11:16
И кстати, здесь даже если и сработает это кликанье, то оно будет в верхний левый угол окна с хэндлом hwnd, а вовсе не в точку с курсором. Ты ведь тут совместил совершенно разные вещи. Если тебе нужно просто кликнуть в точку экрана под курсором, то зачем ты посылаешь сообщение конкрентному окну? Тебе нужно просто произвести кликанье в этой точке с помощью функции mouse_event, проверив перед этим, чтобы точка находилась в пределах окна. Если же ты хочешь кликнуть в определённую точку конкретного окна, то тебе для этого совершенно необязательно перемещать курсор. Достаточно в сообщении WM_LBUTTONDOWN и WM_LBUTTONUP в качестве одного из параметров указать координаты этой точки в координатной системе данного окна. |
|
Talex
17.10.2011 11:59
Meat: .... Достаточно в сообщении WM_LBUTTONDOWN и WM_LBUTTONUP в качестве одного из параметров указать координаты этой точки в координатной системе данного окна. Я пробовал, но не знаю корректно ли передавал координаты... Примеров не нашел, а компилятор не ругался. Пробовал примерно так: PostMessageA(hwnd,WM_LBUTTONDOWN,0,(100,100)); |
|
Talex
17.10.2011 12:01
P.S. А про mouse_event, спасибо, я что-то про нее и забыл, попробую.
|
|
Meat
17.10.2011 12:36
Всё описано в MSDN. http://msdn.microsoft.com/en-us/library/ms645607(VS.85).aspx Кстати в mouse_event тоже ведь указываются координаты, так что перемещение курсора вообще не нужно. |
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий