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:

ありがとうございます。しかし、これはおそらくターミナルを起動 するたびに実行する必要があるのではないでしょうか?また、すべてのチャートに

すべてのチャートにあるわけではないのは確かです。MT4用で、全ウィンドウ同時、各ウィンドウ別で持っていました。しかし、試行錯誤の結果、これらのものだけをMT5用に作り直しました。端末を再起動するときは気にしてなかったんですけどね。どういうわけか、私は複数のウィンドウを開いておくことはなく、実質的にこれらのスクリプトを使うことはないのです。

 

Always on topは、おそらく完成度は高いが、透明性はないだろう。窓枠にはまだ手をつけません。

ウィンドウの状態制御は、キャンバスやオブジェクトにすべて自分で描画する場合です。

 
Renat Fatkhullin:

Always on topをやる可能性が高いが、透明性はない。窓枠にはとりあえず手をつけません。

ウィンドウの状態を管理するのは、キャンバスやオブジェクトにすべて自分で描画する場合です。

Renatさん、素晴らしいニュースです。

MDIのように、異なる画面内でウィンドウを管理することは可能でしょうか?おそらく、Tile Horizontallyなどいろいろやることになると思います。

 
Mesaoria:

Renatさん、素晴らしいニュースです。

MDIのように、異なる画面内でウィンドウを管理することは可能でしょうか?水平にタイルを貼るなど。

手作業なので、自動化する予定はありません。
 
Vitaly Muzichenko:

そして私はまだ17歳です :)

そして、あなたは17倍もの収入を得ることになるのです ))


 
Alexey Volchanskiy:

そして、17倍の収入を得ることができます ))

いいえ、フルスクリーンでシンボルを開くことができれば便利なだけです。今は、4つ以上のチャートを開いていると、チャートの分析が非常に不便で、それも27インチのモニターで。作業用のシンボルは15個で、市場の分析にはさらに3個のウィンドウが必要で、合計18個のウィンドウがあります。

だから、ウインドウの分離は朗報なのです