Плавающие окна в следующем релизе MetaTrader 5 - страница 2

 
Терминал становится лучше!
 
Sergey Savinkin:
Можно ли будет уменьшать/скрывать толстые рамки окна графика для экономии места?

Можно будет проверить вот этими скриптами. Сейчас работают.

Код удаления рамок

//#property script_show_inputs
#import "user32.dll"
  int SetWindowLongA(int hWnd,int nIndex, int dwNewLong);
  int GetWindowLongA(int hWnd,int nIndex);
  int SetWindowPos(int hWnd, int hWndInsertAfter,int X, int Y, int cx, int cy, int uFlags);
  int GetParent(int hWnd);
  int GetTopWindow(int hWnd);
  int GetWindow(int hWnd, int wCmd);
#import

#define GWL_STYLE         -16 
#define WS_CAPTION        0x00C00000 
#define WS_BORDER         0x00800000
#define WS_SIZEBOX        0x00040000
#define WS_DLGFRAME       0x00400000
#define SWP_NOSIZE        0x0001
#define SWP_NOMOVE        0x0002
#define SWP_NOZORDER      0x0004
#define SWP_NOACTIVATE    0x0010
#define SWP_FRAMECHANGED  0x0020
#define GW_CHILD          0x0005
#define GW_HWNDNEXT       0x0002

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int OnStart() 
{
   int hChartParent = GetParent((int)ChartGetInteger(ChartID(), CHART_WINDOW_HANDLE));    
   int hMDIClient = GetParent(hChartParent); 
   int hChildWindow = GetTopWindow(hMDIClient);
   while (hChildWindow > 0)
   {
      RemoveBorderByWindowHandle(hChildWindow);
      hChildWindow = GetWindow(hChildWindow, GW_HWNDNEXT);
   }
 
   
   return(0);
}
void RemoveBorderByWindowHandle(int hWindow)
{
   int iNewStyle = GetWindowLongA(hWindow, GWL_STYLE) & (~(WS_BORDER | WS_DLGFRAME | WS_SIZEBOX));    
   if (hWindow>0 && iNewStyle>0) 
   {
      SetWindowLongA(hWindow, GWL_STYLE, iNewStyle);
      SetWindowPos(hWindow,0, 0, 0, 0, 0, SWP_NOZORDER | SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE | SWP_FRAMECHANGED);
   }
}

Код возвращения рамок взад.

//#property script_show_inputs
#import "user32.dll"
  int SetWindowLongA(int hWnd,int nIndex, int dwNewLong);
  int GetWindowLongA(int hWnd,int nIndex);
  int SetWindowPos(int hWnd, int hWndInsertAfter,int X, int Y, int cx, int cy, int uFlags);
  int GetParent(int hWnd);
  int GetTopWindow(int hWnd);
  int GetWindow(int hWnd, int wCmd);
#import

#define GWL_STYLE         -16 
#define WS_CAPTION        0x00C00000 
#define WS_BORDER         0x00800000
#define WS_SIZEBOX        0x00040000
#define WS_DLGFRAME       0x00400000
#define SWP_NOSIZE        0x0001
#define SWP_NOMOVE        0x0002
#define SWP_NOZORDER      0x0004
#define SWP_NOACTIVATE    0x0010
#define SWP_FRAMECHANGED  0x0020
#define GW_CHILD          0x0005
#define GW_HWNDNEXT       0x0002

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int OnStart() 
{
   int hChartParent = GetParent((int)ChartGetInteger(ChartID(), CHART_WINDOW_HANDLE));    
   int hMDIClient = GetParent(hChartParent); 
   int hChildWindow = GetTopWindow(hMDIClient);
   while (hChildWindow > 0)
   {
      RemoveBorderByWindowHandle(hChildWindow);
      hChildWindow = GetWindow(hChildWindow, GW_HWNDNEXT);
   }
 
   
   return(0);
}
void RemoveBorderByWindowHandle(int hWindow)
{
   int iNewStyle = GetWindowLongA(hWindow, GWL_STYLE) | ((WS_BORDER | WS_DLGFRAME | WS_SIZEBOX));    
   if (hWindow>0 && iNewStyle>0) 
   {
      SetWindowLongA(hWindow, GWL_STYLE, iNewStyle);
      SetWindowPos(hWindow,0, 0, 0, 0, 0, SWP_NOZORDER | SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE | SWP_FRAMECHANGED);
   }
}
Файлы:
 
Alexey Viktorov:

Можно будет проверить вот этими скриптами. Сейчас работают.

Код удаления рамок

Код возвращения рамок взад.

Спасибо. Но это, наверно, нужно будет запускать при каждом запуске терминала? К тому же на каждом графике.

 

отличная новость.

особенно для торговли с панелей. 

 
Sergey Savinkin:

Спасибо. Но это, наверно, нужно будет запускать при каждом запуске терминала? К тому же на каждом графике.

Не на каждом графике, это точно. У меня это было для МТ4 и для всех окон одновременно и для каждого окна отдельно. Но я методом проб и ошибок переделал под МТ5 только эти. А вот при перезапуске терминала я не обращал внимания. Как-то не держу открытыми несколько окон и практически не пользуюсь этими скриптами.

 

Always on top скорее всего сделаем, но не прозрачность. Рамки окон пока не трогаем.

Управление состоянием окна - это конда вы сами все рисуете своими силами на канвасе или объектами.

 
Renat Fatkhullin:

Always on top скорее всего сделаем, но не прозрачность. Рамки окон пока не трогаем.

Управление состоянием окна - это конда вы сами все рисуете своими силами на канвасе или объектами.

Ренат, отличные новости.

А будет ли возможность управлять окнами в пределах разных экранов, наподобие MDI? Всякие там Tile Horizontally и проч.

 
Mesaoria:

Ренат, отличные новости.

А будет ли возможность управлять окнами в пределах разных экранов, наподобие MDI? Всякие там Tile Horizontally и проч.

Это ручная работа, автоматизировать не планируем.
 
Vitaly Muzichenko:

А  мне ещё 17 :)

И будешь в 17 раз больше зарабатывать ))


 
Alexey Volchanskiy:

И будешь в 17 раз больше зарабатывать ))

Нет, просто было-бы удобно открыть символы во весь экран. Сейчас если открыто более 4 графиков, то анализировать графики крайне неудобно, и это на 27 мониторе. Рабочих символов 15 шт., для анализа ситуации на рынке нужно 3 дополнительных окна - итого 18 шт.

Так что отделение окон -- прекрасная новость!

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