スクリプト: 透明な MetaTrader 5 - ページ 2

 

バージョン変更:

バージョン1.20: チャートに再参加する際、ターミナルが再び不透明になる。

現在、バージョン1.2がモデレーションのために送信されています。

 
こんにちは!mt5でストップロスを設定するスクリプトを探しています。
 

変更点

Version 1.20: スケジュールに再アクセスすると、ターミナルが不透明になる。

 

Версия 1.10: Поддержка Windows XP 32-bit.

あなたはすべてを台無しにしてしまった。

あなたは、32と64のハンドル/ポインタのために、DLL関数を呼び出す2つのバリエーションを作らなければなりませんでした。


 

barabashkakvn:

バージョン1.10: Windows XP 32-bitをサポート。

sergeev:

あなたはすべてを台無しにしてしまった。

32と64のハンドル/ポインタ用にDLL関数を呼び出す2つのバリエーションを作らなければなりませんでした。

例をありがとう!というのも、Windows XPからWindows 8.1までのオペレーティングシステムでuser32.dllライブラリがどのような関数を含んでいるかという問題を解決する必要があり、システムのビット数を考慮する必要があるからです。
 
MT5のビルド900または910では、DLLを呼び出すメカニズムが壊れている疑いがあります。サービスデスク #976227の アプリケーション。 クラッシュはこれに関連しているかもしれません。開発者の皆さん、そこを見てください。
 
とても興味深い!)
 
micle:
MT5のビルド900または910では、DLLを呼び出すメカニズムが壊れている疑いがあります。サービスデスク #976227の アプリケーション。 クラッシュはこれに関連しているかもしれません。開発者の皆さん、そこを見てください。
私の問題は別の関数宣言で解決しました。生きて学ぶ )
 
barabashkakvn:

変更点

バージョン1.20: スケジュールに再アクセスすると、ターミナルが不透明に なる。

英語のコードベースでは、利用可能なバージョンはまだ1.10です。
 

バージョン1.20

//+------------------------------------------------------------------+
//|透明性。mq5||透明。
//|著作権© 2014, ウラジーミル・カルプトフ|||Copyright © 2014, Vladimir Karputov
//|http://wmua.ru/slesar/|(英語
//+------------------------------------------------------------------+
#property copyright "著作権 © 2014, ウラジーミル・カルプトフ"
#property link      "http://wmua.ru/slesar/"
#property version   "1.20"
#import "user32.dll"
//+------------------------------------------------------------------+
//| GetAncestor.の祖先へのハンドルを取得します。
//| ウィンドウを指定します。ウィンドウを指定します。
//+------------------------------------------------------------------+
int GetAncestor(int hwnd,int gaFlags);
//+------------------------------------------------------------------+
//| GetWindowLongW.指定されたウィンドウの情報を取得します。
//| ウィンドウをクリックしてください。
//+------------------------------------------------------------------+
int GetWindowLongW(
                   int hWnd,
                   int nIndex          // GWL_EXSTYLE
                   );
//+------------------------------------------------------------------+
//| SetWindowLongW.ウィンドウの長さを設定します。
//+------------------------------------------------------------------+
int SetWindowLongW(
                   int hWnd,
                   char nIndex,        // GWL_EXSTYLE
                   int dwNewLong       // ws_ex_layered
                   );
//+------------------------------------------------------------------+
//| SetLayeredWindowAttributes.不透明度と透明度を設定します。
//| レイヤーウィンドウのカラーキー。レイヤーウィンドウのカラーキー。
||многослойного|многослойного|окна|многослойного|окна
//+------------------------------------------------------------------+
bool SetLayeredWindowAttributes(
                                int hwnd,// レイヤーウィンドウへのハンドル
                                int crKey,   // 0
                                int bAlpha,  // непрозрачности 0-255
                                int dwFlags  // 0x00000002
                                );
#import
#define   GA_ROOT           0x0002      // 親ウィンドウの連鎖をたどってルートウィンドウを取得します。
#define   GWL_EXSTYLE       -20               // 新しい拡張ウィンドウ・スタイルを設定する
#define   WS_EX_LAYERED     0x00080000        // スタイルウィンドウはレイヤーウィンドウです。 
#define   LWA_ALPHA         0x00000002        // bAlphaを使用して、レイヤーウィンドウの不透明度を決定する。
//+------------------------------------------------------------------+
//| スクリプト・プログラム開始機能|
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   long  mainChartID=ChartID();         // возвращает идентификатор текущего графика
   int   hdlmainChartID=ChartWindowsHandle(mainChartID);
   int   hdlRoot=GetAncestor(hdlmainChartID,GA_ROOT);
   int   SetWindowLongW_func;
   if(GetWindowLongW(hdlRoot,GWL_EXSTYLE)&WS_EX_LAYERED)
     {
      // WS_EX_LAYEREDを使用します。WS_EX_LAYEREDを使用している場合は、以下のようになります。
      // ウィンドウはすでにスタイル WS_EX_LAYERED を持っています。このウィンドウのスタイルからWS_EX_LAYEREDを削除します。
      SetWindowLongW_func=SetWindowLongW(hdlRoot,GWL_EXSTYLE,
                                         GetWindowLongW(hdlRoot,GWL_EXSTYLE)&~WS_EX_LAYERED);
      return;
     }
// WS_EX_LAYERED を ROOT に設定する。
   SetWindowLongW_func=SetWindowLongW(hdlRoot,GWL_EXSTYLE,
                                      GetWindowLongW(hdlRoot,GWL_EXSTYLE)|WS_EX_LAYERED);
   SetLayeredWindowAttributes(hdlRoot,0,(255*70)/100,LWA_ALPHA);
   return;
  }
//+------------------------------------------------------------------+
//| この関数はハンドルグラフィックを取得します。|
//| Функция получает хэндл графика|
//+------------------------------------------------------------------+
int ChartWindowsHandle(long chart_ID)
  {
//--- プロパティ値を取得するための変数を準備する。
//--- подготовим переменную для получения значения свойства
   long result=-1;
//--- エラー値をリセットする
//--- сбросим значение ошибки
   ResetLastError();
//--- プロパティ値を受け取る
//--- получим значение свойства
   if(!ChartGetInteger(chart_ID,CHART_WINDOW_HANDLE,0,result))
     {
      //--- エキスパートジャーナルにエラーメッセージを表示する。
      //--- выведем соообщение об ошибке в журнал "Эксперты".
      Print(__FUNCTION__+", Error Code = ",GetLastError());
     }
//--- チャート・プロパティの値を返す。
//--- вернем значение свойства графика
   return((int)result);
  }
//+------------------------------------------------------------------+