Fenêtres flottantes dans la prochaine version de MetaTrader 5 - page 2

 
Le terminal s'améliore !
 
Sergey Savinkin:
Sera-t-il possible de réduire/masquer les cadres épais des fenêtres des tableaux pour gagner de l'espace ?

Vous pouvez vérifier avec ces scripts. Ils travaillent maintenant.

Code pour enlever les cadres

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

Le code pour remettre les cadres en place.

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

Vous pouvez vérifier avec ces scripts. Ils travaillent maintenant.

Code pour enlever les cadres

Le code pour remettre les cadres en place.

Merci. Mais cela devra probablement être exécuté à chaque fois que le terminal est lancé? Également sur toutes les cartes.

 

Bonne nouvelle.

notamment pour les échanges à partir de panneaux.

 
Sergey Savinkin:

Merci. Mais cela devrait probablement être exécuté à chaque fois que le terminal est lancé? Également sur toutes les cartes.

Pas sur tous les tableaux, c'est sûr. Je l'avais pour MT4 et pour toutes les fenêtres simultanément et pour chaque fenêtre séparément. Mais par tâtonnement, je n'ai refait que ceux-là pour MT5. Je n'y ai pas prêté attention lors du redémarrage du terminal, cependant. D'une manière ou d'une autre, je ne garde pas plusieurs fenêtres ouvertes et je n'utilise pratiquement pas ces scripts.

 

Toujours au top sera probablement fait, mais pas la transparence. Nous ne toucherons pas encore aux cadres des fenêtres.

Le contrôle de l'état de la fenêtre est le moment où vous dessinez tout vous-même sur le canevas ou les objets.

 
Renat Fatkhullin:

Nous ferons très probablement Always on top, mais pas la transparence. Nous n'allons pas toucher au cadre de la fenêtre pour l'instant.

La gestion de l'état de la fenêtre est le moment où vous dessinez tout vous-même sur des canevas ou des objets.

Renat, grandes nouvelles.

Sera-t-il possible de gérer les fenêtres au sein de différents écrans, comme MDI ? Nous ferons probablement toutes sortes de tuiles à l'horizontale et ainsi de suite.

 
Mesaoria:

Renat, grandes nouvelles.

Sera-t-il possible de gérer les fenêtres au sein de différents écrans, comme MDI ? Tile Horizontal et ainsi de suite.

C'est un travail manuel, nous ne prévoyons pas de l'automatiser.
 
Vitaly Muzichenko:

Et j'ai toujours 17 ans :)

Et vous gagnerez 17 fois plus :))


 
Alexey Volchanskiy:

Et vous gagnerez 17 fois plus d'argent ;))

Non, il serait juste pratique d'ouvrir les symboles en plein écran. Actuellement, si vous avez plus de 4 graphiques ouverts, il est extrêmement peu pratique d'analyser les graphiques, et ce sur un moniteur 27. Les symboles de travail sont au nombre de 15 et pour l'analyse du marché j'ai besoin de 3 fenêtres supplémentaires - soit un total de 18 fenêtres.

La séparation des fenêtres est donc une excellente nouvelle !