Чем заменить оператор while(true) - страница 3

 
forex2030:

верно кнопка и их много
я добиваюсь чтобы при нажатии мышкой на кнопку получить имя в котором содержится тикет ордера и именно его надо закрыть

у вас кажется логика вывернулась :-)

есть заранее известный набор кнопок (массив их имён) - проходите по нему и проверяете для каждой OBJPROP_STATE - если не 0 значит кнопка нажата. Выставляете в 0 и запускаете обработчик.

или проблемы ассоциировать имя_объекта => тикет без постоянного парсинга имён ?

 
Maxim Kuznetsov:

у вас кажется логика вывернулась :-)

есть заранее известный набор кнопок (массив их имён) - проходите по нему и проверяете для каждой OBJPROP_STATE - если не 0 значит кнопка нажата. Выставляете в 0 и запускаете обработчик.

или проблемы ассоциировать имя_объекта => тикет без постоянного парсинга имён ?

То ли у меня лыжи не едут, то ли еще что ...

Не меняется состояние кнопки само по себе. Надо перехватывать событие клика на этой кнопке и самому менять ее состояние. Так что while(true) в топку или пишем dll и там, в отдельном потоке, что хотите отслеживайте.

 
forex2030:

верно кнопка и их много
я добиваюсь чтобы при нажатии мышкой на кнопку получить имя в котором содержится тикет ордера и именно его надо закрыть

Которого именно ордера? 

 
Vladimir Simakov:

То ли у меня лыжи не едут, то ли еще что ...

Не меняется состояние кнопки само по себе. Надо перехватывать событие клика на этой кнопке и самому менять ее состояние. Так что while(true) в топку или пишем dll и там, в отдельном потоке, что хотите отслеживайте.

Интересно... А как же тогда отслеживаются кнопки в тестере MetaTrader5 ?


Именно отслеживанием их состояний.

 
Vladimir Simakov:

То ли у меня лыжи не едут, то ли еще что ...

Не меняется состояние кнопки само по себе. Надо перехватывать событие клика на этой кнопке и самому менять ее состояние. Так что while(true) в топку или пишем dll и там, в отдельном потоке, что хотите отслеживайте.

у вас там совсем что-ли очень-очень-очень длинный цикл и причём в индикаторе ?

в скрипте в OnStart() ещё допустим долгий опрос в цикле, НО: даже там, стоит периодически делать ChartRedraw и RefreshRates, хотя и это полумеры. 

OnCalculate индикатора и OnTick (и прочие OnXXX) должны быстро завершаться, чтобы не терять интерактивности и реагировать на поступающие события.

У терминала копятся во всяких очередях события/сообщения, обработать их иначе как выйдя из штатной процедуры нельзя. Ну нету в платформе DoPendingEvents()

---

"наверное надо что-то менять в консерватории"

 
Ihor Herasko:

А как Вы узнаете, что была нажата клавиша мыши без OnChartEvent()?

В OnTick() или в OnTimer() проверить состояние кнопки. С таким подходом даже в тестере будет работать.

 
Maxim Kuznetsov:

у вас там совсем что-ли очень-очень-очень длинный цикл и причём в индикаторе ?

в скрипте в OnStart() ещё допустим долгий опрос в цикле, НО: даже там, стоит периодически делать ChartRedraw и RefreshRates, хотя и это полумеры. 

OnCalculate индикатора и OnTick (и прочие OnXXX) должны быстро завершаться, чтобы не терять интерактивности и реагировать на поступающие события.

У терминала копятся во всяких очередях события/сообщения, обработать их иначе как выйдя из штатной процедуры нельзя. Ну нету в платформе DoPendingEvents()

---

"наверное надо что-то менять в консерватории"

Какая хорошая тема получилась))) Заодно либу свою поправил. А составителям доков или разработчикам на заметку:

Поясняю. Если у кнопки свойство OBJPROP_SELECTABLE установлено true, то кнопка не реагирует на нажатие. Не знаю, так это задумано или баг в реализации, но, если первое, то неплохо бы было в доках отразить.

PS. Все таки больше на баг смахивает.

 
Dmitry Fedoseev:

В OnTick() или в OnTimer() проверить состояние кнопки. С таким подходом даже в тестере будет работать.

Именно в этом сообщении речь о клавишах мыши. Опросить их средствами MQL не получится.

Ну а состояние кнопки (графического объекта) у ТС получить почему-то не выходит. В чем там проблема - неясно.

 

Ладно, буду избавляться от while(true), по другому не решить вопрос
Всем спасибо

 
forex2030:

Ладно, буду избавляться от while(true), по другому не решить вопрос
Всем спасибо

Давно пора

зацикливания подобного рода в топку