Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Знаете ли вы, что в MQL5 появились структуры?
Sergey Pekshev
611
Sergey Pekshev 2016.02.10 06:43 
Можно ли как-нибудь определить, окно распахнуто на максимум или в терминале видно несколько окон?

 

есть свойство CHART_BRING_TO_TOP - Показ графика поверх всех других

 

Но оно не подходит, т.к. окна могут быть расположены в виде мозайки и одно из них будет активно
Нужно это для того что бы перерисовывать индюк только на видимом окне (снизить нагрузку на терминал), пропуск тиков, вообще не важен
в идеале бы, определять видно окно на экране или нет

Vladimir Karputov
Модератор
37568
Vladimir Karputov 2016.02.10 07:27  
Sergey Pekshev:
Можно ли как-нибудь определить, окно распахнуто на максимум или в терминале видно несколько окон?

 

есть свойство CHART_BRING_TO_TOP - Показ графика поверх всех других

 

Но оно не подходит, т.к. окна могут быть расположены в виде мозайки и одно из них будет активно
Нужно это для того что бы перерисовывать индюк только на видимом окне (снизить нагрузку на терминал), пропуск тиков, вообще не важен
в идеале бы, определять видно окно на экране или нет

Состояние окон (свёрнуто, распахнуто) - это Windows API и с помощью чистого MQL5 эти состояния окон не получить. А свойство CHART_BRING_TO_TOP отлично работает и при полностью открытых окнах и при частично. Так же можно всегда узнать какое окно является на данный момент активным:

bool var=ChartGetInteger(0,CHART_BRING_TO_TOP,0); // Get property CHART_BRING_TO_TOP
                                                     // получаем свойство CHART_BRING_TO_TOP
   if(var) // This vhart active? // Этот график активный?
     {
      ...
     }
Sergey Pekshev
611
Sergey Pekshev 2016.02.10 08:09  
Karputov Vladimir:

А свойство CHART_BRING_TO_TOP отлично работает и при полностью открытых окнах и при частично. 

Я разве утверждал обратное? если окна расположены в виде мозайки, тогда толку ни какого нет от этого свойства, мне нужно все окна перерисовывать 
Vladimir Karputov
Модератор
37568
Vladimir Karputov 2016.02.10 08:13  
Sergey Pekshev:
Я разве утверждал обратное? если окна расположены в виде мозайки, тогда толку ни какого нет от этого свойства, мне нужно все окна перерисовывать 
А какая проблема? Индикатор на то и индикатор, чтобы следить за изменением цены и отображать эти изменения на экране. 
Artyom Trishkin
71258
Artyom Trishkin 2016.02.10 08:19  
Karputov Vladimir:
А какая проблема? Индикатор на то и индикатор, чтобы следить за изменением цены и отображать эти изменения на экране. 

Тяжёлый наверное индикатор, вот и хочет его return`ом завершать на свёрнутом окне.

Хотя можно его так же завершать и на не активном.

Sergey Pekshev
611
Sergey Pekshev 2016.02.10 08:25  
Artyom Trishkin:

Тяжёлый наверное индикатор, вот и хочет его return`ом завершать на свёрнутом окне.

 Да

 

Хотя можно его так же завершать и на не активном.

Можно, но тогда остальные окна обновляться не будут. 

Sergey Pekshev
611
Sergey Pekshev 2016.02.10 08:31  
Там не расчеты тяжелые, а идет обновления оффлайнового графика, да еще и в ускоренном режиме, когда окон много, нагрузка возрастает на проц, если окно развернуто на весь экран то свойство CHART_BRING_TO_TOP работает отлично, сейчас так и сделано, но иногда нужно и мозайкой окна располагать, на некоторое время, хочется оптимизировать, что бы в холостую не нагружать комп ради стабильной работы в разных режимах расположения окон.
Vladimir Karputov
Модератор
37568
Vladimir Karputov 2016.02.10 09:44  
Sergey Pekshev:
Там не расчеты тяжелые, а идет обновления оффлайнового графика, да еще и в ускоренном режиме, когда окон много, нагрузка возрастает на проц, если окно развернуто на весь экран то свойство CHART_BRING_TO_TOP работает отлично, сейчас так и сделано, но иногда нужно и мозайкой окна располагать, на некоторое время, хочется оптимизировать, что бы в холостую не нагружать комп ради стабильной работы в разных режимах расположения окон.
А при расположении мозаикой, допустимо чтобы Ваш индикатор рисовал в одном маленьком окне (так как при мозаике все окошки маленькие) - в окне, которое является активным (активное окно - окно в котором был последний клик)?
Dmitry Fedoseev
41693
Dmitry Fedoseev 2016.02.10 10:01  

Может быть... но тем не менее работает:

#import "user32.dll"
   bool GetWindowPlacement(int hWnd,int & lpwndpl[]); 
   int GetWindowLongA(int hWnd,int GWL_STYLE);   
#import

 

   int m[11];
   int p[11];
   
   int h=WindowHandle(Symbol(),Period());
   int x=GetWindowLongA(h,-8);
   bool z=GetWindowPlacement(h,m);
   z=GetWindowPlacement(x,p);

   if(m[9]>p[9] || m[10]>p[10]){
      Alert("Полное");
   }
   else{
      Alert("---");
   }
Sergey Pekshev
611
Sergey Pekshev 2016.02.10 10:29  
Karputov Vladimir:
А при расположении мозаикой, допустимо чтобы Ваш индикатор рисовал в одном маленьком окне (так как при мозаике все окошки маленькие) - в окне, которое является активным (активное окно - окно в котором был последний клик)?

Активным я имел ввиду то окно у которого CHART_BRING_TO_TOP  == 1

если окна мазайкой, смысла от CHART_BRING_TO_TOP  ни какого нету

Vladimir Karputov
Модератор
37568
Vladimir Karputov 2016.02.10 10:38  
Sergey Pekshev:

Активным я имел ввиду то окно у которого CHART_BRING_TO_TOP  == 1

если окна мазайкой, смысла от CHART_BRING_TO_TOP  ни какого нету

Вы всегда можете определить активное окно:

bool var=ChartGetInteger(0,CHART_BRING_TO_TOP,0); // Get property CHART_BRING_TO_TOP
                                                     // получаем свойство CHART_BRING_TO_TOP
   if(var) // This vhart active? // Этот график активный?
     {
      ...
     }
Даже если окна расположены мозаикой. Активное окно остаётся активным (вот правда компьютер ещё не научился определять активное окно по направлению взгляда, поэтому активное окно - это окно в котором был последний клик мышки).
/ /12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий