Можно ли как-нибудь определить, окно распахнуто на максимум или в терминале видно несколько окон?

 
Можно ли как-нибудь определить, окно распахнуто на максимум или в терминале видно несколько окон?

 

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

 

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

 
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? // Этот график активный?
     {
      ...
     }
 
Karputov Vladimir:

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

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

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

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

 
Artyom Trishkin:

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

 Да

 

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

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

 
Там не расчеты тяжелые, а идет обновления оффлайнового графика, да еще и в ускоренном режиме, когда окон много, нагрузка возрастает на проц, если окно развернуто на весь экран то свойство CHART_BRING_TO_TOP работает отлично, сейчас так и сделано, но иногда нужно и мозайкой окна располагать, на некоторое время, хочется оптимизировать, что бы в холостую не нагружать комп ради стабильной работы в разных режимах расположения окон.
 
Sergey Pekshev:
Там не расчеты тяжелые, а идет обновления оффлайнового графика, да еще и в ускоренном режиме, когда окон много, нагрузка возрастает на проц, если окно развернуто на весь экран то свойство CHART_BRING_TO_TOP работает отлично, сейчас так и сделано, но иногда нужно и мозайкой окна располагать, на некоторое время, хочется оптимизировать, что бы в холостую не нагружать комп ради стабильной работы в разных режимах расположения окон.
А при расположении мозаикой, допустимо чтобы Ваш индикатор рисовал в одном маленьком окне (так как при мозаике все окошки маленькие) - в окне, которое является активным (активное окно - окно в котором был последний клик)?
 

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

#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("---");
   }
 
Karputov Vladimir:
А при расположении мозаикой, допустимо чтобы Ваш индикатор рисовал в одном маленьком окне (так как при мозаике все окошки маленькие) - в окне, которое является активным (активное окно - окно в котором был последний клик)?

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

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

 
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? // Этот график активный?
     {
      ...
     }
Даже если окна расположены мозаикой. Активное окно остаётся активным (вот правда компьютер ещё не научился определять активное окно по направлению взгляда, поэтому активное окно - это окно в котором был последний клик мышки).