Упорядочить окна графиков вертикально программно.

 
Здравствуйте. Имеется необходимость программно упорядочивать расположение окон в мт5.
Имеется скрипт который это делает с применением winapi, но в нем можно задать только переключение на окна мозайкой и каскадом 
Функции WM_MDITILE и WM_MDICASCADE - мозайка и каскад. Но я не нашел функцию в winapi для упорядочивания вертикально.

Возможно ли программно упорядочить окна вертикально? Может есть другой способ?

#import "user32.dll"
   int GetParent(int hWnd);
  int GetAncestor(int, int);
   int SendMessageA(int hWnd, int Msg, int wParam, int lParam);
   int PostMessageA(int hWnd, int Msg, int wParam, int lParam);
#import
#define WM_MDITILE    0x0226 
#define WM_MDICASCADE 0x0227

void OnStart()
{
  int wHandle=(int)ChartGetInteger(0,CHART_WINDOW_HANDLE);
  int hMDI = GetParent(GetParent(wHandle));
  int ret=SendMessageA(hMDI, WM_MDITILE, 0, 0);
}
 
lego9955:
Здравствуйте. Имеется необходимость программно упорядочивать расположение окон в мт5.
Имеется скрипт который это делает с применением winapi, но в нем можно задать только переключение на окна мозайкой и каскадом 
Функции WM_MDITILE и WM_MDICASCADE - мозайка и каскад. Но я не нашел функцию в winapi для упорядочивания вертикально.

Возможно ли программно упорядочить окна вертикально? Может есть другой способ?

При упорядочивании окон вертикально в МТ5, spy++ показывает, что  срабатывает команда  WM_MDIICONARRANGE -  0x0228

Если её подставить в ваш код, то ничего не происходит. Увы.

Но если сделать немного по другому, то работает.

#import "user32.dll"
int GetAncestor(int, int);
int SendMessageW(int hWnd, int Msg, int wParam, int lParam);
#import
#define GA_ROOT     2
#define WM_COMMAND  0x0111

enum variant
  {
   v = 57652, // вертикаль
   k = 57650, // каскад
   m = 33527, // мозаика
   g = 57649  // горизонталь
  };
input variant m_var = v; // выбор
//+------------------------------------------------------------------+
void OnStart()
  {
   int wHandle = GetAncestor((int)ChartGetInteger(0, CHART_WINDOW_HANDLE), GA_ROOT);
   SendMessageW(wHandle, WM_COMMAND, m_var, 0);
  }
//+------------------------------------------------------------------+
В МТ5 работает, а вот насчёт МТ4 не знаю.
 
Спасибо огромное. 
 
Aleksandr Slavskii #:

При упорядочивании окон вертикально в МТ5, spy++ показывает, что  срабатывает команда  WM_MDIICONARRANGE -  0x0228

Если её подставить в ваш код, то ничего не происходит. Увы.

Но если сделать немного по другому, то работает.

В МТ5 работает, а вот насчёт МТ4 не знаю.

Здравствуйте! Большое спасибо.

Пробовал на МТ-5.

Три варианта работают. Но если написать:

input variant m_var = g; // выбор          какое либо действие отсутствует

Еще раздражает требование при каждом запуске скрипта подтвердить использование DLL. Можно как-то отключить? Или что-то с настройками терминала?
 

У меня окно  входных параметров при запуске появляется, если активировать этой строчкой

input variant m_var = g;   - да, в горизонталь не переключает

Сервис-Настройки-Советники - импорт DLL может не разрешен?

 

Чего то перепутал.

Исправьте на    g = 57651

или скачайте прилепленный файл

Файлы:
test.mq5  3 kb
 
Aleksandr Slavskii #:
57651
Да! Спасибо...
Причина обращения: