Schwebende Fenster in der nächsten Version von MetaTrader 5 - Seite 2

 
Das Terminal wird immer besser!
 
Sergey Savinkin:
Wird es möglich sein, dicke Kartenfensterrahmen zu reduzieren/auszublenden, um Platz zu sparen?

Sie können dies mit diesen Skripten überprüfen. Sie sind jetzt im Einsatz.

Code zum Entfernen der Rahmen

//#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);
   }
}

Der Code zum Wiedereinsetzen der Rahmen.

//#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:

Sie können dies mit diesen Skripten überprüfen. Sie sind jetzt im Einsatz.

Code zum Entfernen der Rahmen

Der Code zum Wiedereinsetzen der Rahmen.

Danke. Aber das wird wahrscheinlich jedes Mal ausgeführt werden müssen, wenn das Terminal gestartet wird? Auch auf jeder Karte.

 

tolle Neuigkeiten.

vor allem für den Handel über Panels.

 
Sergey Savinkin:

Ich danke Ihnen. Aber das müsste wahrscheinlich jedes Mal ausgeführt werden, wenn das Terminal gestartet wird? Auch auf jeder Karte.

Nicht auf jeder Karte, das ist sicher. Ich hatte es für MT4 und für alle Fenster gleichzeitig und für jedes Fenster einzeln. Aber durch Versuch und Irrtum habe ich nur diese für MT5 umgestaltet. Beim Neustart des Terminals habe ich sie allerdings nicht beachtet. Irgendwie halte ich nicht mehrere Fenster offen und benutze diese Skripte praktisch nicht.

 

Immer an der Spitze wird wahrscheinlich getan werden, aber nicht Transparenz. Wir werden die Fensterrahmen noch nicht anfassen.

Bei der Fensterstatuskontrolle zeichnen Sie alles selbst auf die Leinwand oder auf Objekte.

 
Renat Fatkhullin:

Wir werden höchstwahrscheinlich Always on top machen, aber keine Transparenz. Wir werden den Fensterrahmen vorerst nicht anfassen.

Den Zustand des Fensters verwaltet man, indem man alles selbst auf die Leinwand oder auf Objekte zeichnet.

Renat, tolle Neuigkeiten.

Wird es möglich sein, Fenster innerhalb verschiedener Bildschirme zu verwalten, wie bei MDI? Wir werden wahrscheinlich alle möglichen Arten von Kacheln horizontal und so weiter machen.

 
Mesaoria:

Renat, tolle Neuigkeiten.

Wird es möglich sein, Fenster innerhalb verschiedener Bildschirme zu verwalten, wie bei MDI? Horizontal kacheln und so weiter.

Das ist eine manuelle Arbeit, die wir nicht zu automatisieren gedenken.
 
Vitaly Muzichenko:

Und ich bin immer noch 17 :)

Und Sie werden das 17-fache verdienen ))


 
Alexey Volchanskiy:

Und Sie werden 17 Mal mehr verdienen ))

Nein, es wäre nur praktisch, die Symbole im Vollbildmodus zu öffnen. Wenn Sie derzeit mehr als 4 Charts geöffnet haben, ist es extrem unbequem, die Charts zu analysieren, und das auf einem 27er Monitor. Die Arbeitssymbole sind 15 und für die Analyse des Marktes benötige ich 3 zusätzliche Fenster - insgesamt 18 Fenster.

Die Trennung der Fenster ist also eine gute Nachricht!

Grund der Beschwerde: