Как сделать собственный графический объект "непрозрачным" для двойного клика мыши? - страница 2

 
Реter Konow:

В МТ5 можно блокировать появление штатного меню при нажатии на правую кнопку мышки. Попробуйте нажимать правой кнопкой на ваши объекты, предварительно отключая штатное меню, когда курсор находится над площадью вашего объекта. Потом, включайте обратно.

Вряд ли можно считать Ваши оба предложения желанными решениями проблемы. поскольку уже существующее решение - нажимать на мышь достаточно редко, чтобы не вызывать двойной щелчок - по моему мнению, лучше. И все же спасибо за участие.

 

Раз разработчики игнорируют высказанную здесь "хотелку", пришлось решить задачу самому с помощью лома и кувалды. Поясняю.

Когда курсор мыши находится над моим доморощенным графическим объектом, я уменьшаю время двойного щелчка до 1 миллисекунды (чтобы он гарантированно не сработал):

SetDoubleClickTime(1);

Когда советник обнаруживает, что курсор мыши съехал с графического объекта, я восстанавливаю стандартное значение времени двойного щелчка (обыкновенно это 500-550 миллисекунд):

SetDoubleClickTime(550);

Мне не очень нравится этот метод, потому что я не люблю манипулировать "священной коровой" Windows. Между тем, метод проверен и работает без проблем.

Благодарю всех принявших участие в обсуждении темы.

 
foxmag:

Раз разработчики игнорируют высказанную здесь "хотелку", пришлось решить задачу самому с помощью лома и кувалды. Поясняю.

Когда курсор мыши находится над моим доморощенным графическим объектом, я уменьшаю время двойного щелчка до 1 миллисекунды (чтобы он гарантированно не сработал):

Когда советник обнаруживает, что курсор мыши съехал с графического объекта, я восстанавливаю стандартное значение времени двойного щелчка (обыкновенно это 500-550 миллисекунд):

Мне не очень нравится этот метод, потому что я не люблю манипулировать "священной коровой" Windows. Между тем метод проверен и работает без проблем.

Благодарю всех принявших участие в обсуждении темы.

А чем вам не нравится такой вариант

  ObjectSetInteger(0, "name", OBJPROP_SELECTABLE, false);
 
Alexey Viktorov:

А чем вам не нравится такой вариант

Он мне не "не нравится". Его невозможно применить к линиям, вынужденный двойной щелчок по которым и вызывает появление не нужных окон, содержащих свойства линий.

 
foxmag:

Он мне не "не нравится". Его невозможно применить к линиям, вынужденный двойной щелчок по которым и вызывает появление не нужных окон, содержащих свойства линий.

А вы проверили?

 
Alexey Viktorov:

А вы проверили?

Проверять нечего. У линий и у индикаторов нет имен, только пути к файлам индикаторов, так что нечего ставить в поле "name". Но я тем не менее проверил, подставив вместо "name" 1) путь к файлу, 2) имя файла. Не дышит.

 
foxmag:

Проверять нечего. У линий и у индикаторов нет имен, только пути к файлам индикаторов, так что нечего ставить в поле "name". Но я тем не менее проверил, подставив вместо "name" 1) путь к файлу, 2) имя файла. Не дышит.

Так... Давайте расставим всё по полочкам. Вы начали говорить о графических объектах. Каждый графический объект имеет своё уникальное имя. Это факт зафиксированный в документации. Теперь о каком-то файле и пути к файлу. Так что мешает на графике? Файл, линия индикатора или графический объект?

 
Alexey Viktorov:

Так... Давайте расставим всё по полочкам. Вы начали говорить о графических объектах. Каждый графический объект имеет своё уникальное имя. Это факт зафиксированный в документации. Теперь о каком-то файле и пути к файлу. Так что мешает на графике? Файл, линия индикатора или графический объект?

1. Есть мой собственный графический объект OBJ_LABEL с именем my_object, обладающий свойством невыделяемости:

ObjectSetInteger(0,"my_object",OBJPROP_SELECTABLE,false);

2. Под ним находится линия какого-нибудь индикатора, например, простая средняя (все равно, что именно)

3. Я делаю два последовательных клика мышью по моему объекту my_object с промежутком между ними менее 500 миллисекунд (например, чтобы нарастить на 2 значение некоторой переменной, что управляется как раз нажатием на my_object). При этом нижняя линия воспринимает два моих клика как двойной клик и открывает окно со свойствами линии, что мне совсем не нужно и что делает невозможным дальнейшее кликанье по моему объекту. Я вынужден закрывать появившееся окно, а потом кликать по моему объекту нужное мне количество раз, соблюдая между кликаньями необходимый временной интервал не менее 500 миллисекунд (т.е. сравнительно медленно), чтобы не допустить двойной щелчок, который опять откроет окно со свойствами линии, находящейся под моим объектом my_object.

Посмотрите мое видео на стр. 1, надеюсь, поможет. Мой вопрос собственно состоял в том, не пропустил ли я чего у разработчиков МТ. Вдруг они уже защитили пользовательские графические объекты от сквозного кликанья, чтобы все, что находится под ними, не реагировало на щелканье мышью.

 
foxmag:

1. Есть мой собственный графический объект OBJ_LABEL с именем my_object, обладающий свойством невыделяемости:

2. Под ним находится линия какого-нибудь индикатора, например, простая средняя (все равно, что именно)

3. Я делаю два последовательных клика мышью по моему объекту my_object с промежутком между ними менее 500 миллисекунд (например, чтобы нарастить на 2 значение некоторой переменной, что управляется как раз нажатием на my_object). При этом нижняя линия воспринимает два моих клика как двойной клик и открывает окно со свойствами линии, что мне совсем не нужно и что делает невозможным дальнейшее кликанье по моему объекту. Я вынужден закрывать появившееся окно, а потом кликать по моему объекту нужное мне количество раз, соблюдая между кликаньями необходимый временной интервал не менее 500 миллисекунд (т.е. сравнительно медленно), чтобы не допустить двойной щелчок, который опять откроет окно со свойствами линии, находящейся под моим объектом my_object.

Посмотрите мое видео на стр. 1, надеюсь, поможет. Мой вопрос собственно состоял в том, не пропустил ли я чего у разработчиков МТ. Вдруг они уже защитили пользовательские графические объекты от сквозного кликанья, чтобы все, что находится под ними, не реагировало на щелканье мышью.

Я смотрел это видео, но как и раньше понял совсем наоборот. Теперь попытался что-то сделать... ничего не получилось. Даже через панель, где 4 объекта друг на друге, окно свойств индикатора выпрыгивает...

А вот если попадает «чужой» графический объект под то место где надо тыкать, то к этому объекту надо применить

ObjectSetInteger(0,"my_object",OBJPROP_SELECTABLE,false);
 
fregat555:

 к чему вообще вся эта хрень, с умным видом обсуждаете какую-то ерунду,

не имеющую значение для торговли.

Мил человек, а Вы не заметили, что сами присоединились к обсуждению "хрени"?

Причина обращения: