記事"グラフィカルインタフェースIV:マルチウィンドウモードと優先度のシステム(チャプター2)"についてのディスカッション

 

新しい記事 グラフィカルインタフェースIV:マルチウィンドウモードと優先度のシステム(チャプター2) はパブリッシュされました:

この章では、MQLアプリケーションでのマルチウィンドウインタフェースの作成の可能性をもたらすライブラリの実装を拡張します。また、グラフィカルオブジェクト上でのマウスの左クリックの優先順位のシステムを開発します。これは、要素がユーザのアクションに応答しない場合に発生する問題を回避するために必要です。

図1。マルチウィンドウモードのテスト

図1。マルチウィンドウモードのテスト

作者: Anatoli Kazharski

 

Anatoly、私はバグに気づきました。例を見て、ウィンドウが右端まで押されていて、ツールチップが有効になっている場合、これらのツールチップが画面の右端を越えてしまうことをすぐに確認しました。ツールチップが画面からはみ出したときのx座標を修正してもらえますか?

そしてもう一つの提案:メニュー、ドロップダウン・サブメニューを持つメニュー・アイテム(正しい呼び方がわかりません)、別のアイテムが開くことを示す右矢印があるものでは、(Windowsのように)そのようなメニュー・アイテムにカーソルを合わせたときに開くようにしたほうがいいと思います。あるいは、カーソルを合わせるかクリックするかで、新しい項目が開くようにするか(今のまま)。

 
Artyom Trishkin:

Anatoly、私はバグに気づきました。例を見て、ウィンドウが右端まで押されていて、ツールチップが有効になっている場合、これらのツールチップが画面の右端を越えてしまうことをすぐに確認しました。ツールチップが画面からはみ出したときのx座標を修正してもらえますか?

そしてもう一つの提案:メニュー、ドロップダウン・サブメニューを持つメニュー・アイテム(正しい呼び方がわかりません)、別のアイテムが開くことを示す右矢印があるものでは、(Windowsのように)そのようなメニュー・アイテムにカーソルを合わせたときに開くようにしたほうがいいと思います。あるいは、カーソルを合わせるかクリックするかで、新しい項目が開くようにするか(今のまま)。

そうします。ライブラリの最初のバージョンが完全に公開された後に、修正と改良を行います。現在の結果を修正する必要があります。

その後、やるべきことのリストを作成し、優先順位を定義し、別の記事を公開するようにします。

 

素晴らしい連載記事をありがとうございます。 MQL4のコードを楽しく読ませていただきました。 Program.mqhは以下の2つのエラーです:

//error#1: 'Program.mqh'の配列が範囲外 (753,32)

//742~746行を修正
   string text[2]=
     {
      "\"Icon button\" (1) control",
      "Opens the dialog box (2)."
     };

//error#2: 'Program.mqh'の配列が範囲外 (1012,32)

//1000行目から1005行目までを修正
   string text[3]=
     {
      "\"Icon button\" (5) control",
      "This is the second line of the tooltip.",
      "This is the third line of the tooltip."
     };
 
Kaleem Haider:

素晴らしい連載をありがとうございました。 MQL4のコードも楽しく読ませていただきました。 Program.mqhは以下の2つのエラーです:

ありがとうございます。

これらのエラーの私のバージョンではありません。

742-746:

//+------------------------------------------------------------------+
//| ツールチップ1|
//+------------------------------------------------------------------+
bool CProgram::CreateTooltip1(void)
  {
#define  TOOLTIP1_LINES_TOTAL 2
//--- 
   m_tooltip1.WindowPointer(m_window1);
   m_tooltip1.ElementPointer(m_icon_button1);
//--- 
   string text[]=
     {
      "Line 1",
      "Line 2"
     };
//--- 
   m_tooltip1.Header("Icon Button 1");
   m_tooltip1.XSize(250);
   m_tooltip1.YSize(70);
//--- 
   for(int i=0; i<TOOLTIP1_LINES_TOTAL; i++)
      m_tooltip1.AddString(text[i]);
//--- 
   if(!m_tooltip1.CreateTooltip(m_chart_id,m_subwin))
      return(false);
//--- 
   CWndContainer::AddToElementsArray(0,m_tooltip1);
   return(true);
  }

//---

1000-1005:

//+------------------------------------------------------------------+
//| ツールチップ5|
//+------------------------------------------------------------------+
bool CProgram::CreateTooltip5(void)
  {
#define  TOOLTIP5_LINES_TOTAL 3
//--- 
   m_tooltip5.WindowPointer(m_window1);
   m_tooltip5.ElementPointer(m_icon_button5);
//--- 
   string text[]=
     {
      "Line 1",
      "Line 2",
      "Line 3"
     };
//--- 
   m_tooltip5.Header("Icon Button 5");
   m_tooltip5.XSize(250);
   m_tooltip5.YSize(80);
//--- 
   for(int i=0; i<TOOLTIP5_LINES_TOTAL; i++)
      m_tooltip5.AddString(text[i]);
//--- 
   if(!m_tooltip5.CreateTooltip(m_chart_id,m_subwin))
      return(false);
//--- 
   CWndContainer::AddToElementsArray(0,m_tooltip5);
   return(true);
  }
 
Anatoli Kazharski:

ありがとう。

これらのエラーの私のバージョンではありません。

742-746:

//---

1000-1005:

エラーは、記事のダウンロードセクションにあります。 多分それは更新されていませんでした。
 

Kaleemは少し古いプラットフォームのバージョンを使っているようです。

しかし、わかりやすくするため、またエラーが起きにくくするために、ソースコードを変更して、text[TOOLTIP1_LINES_TOTAL]とtext[TOOLTIP5_LINES_TOTAL]のように、明示的にサイズを指定して配列を定義するようにすべきです。そうしないと、将来、配列が変更されても定義が省略されない場合に、out of boundsエラーが発生する可能性があります。

 
Kaleem Haider:
エラーは記事のダウンロードセクションにあります。 多分、更新されていないのでしょう。

確認しました

はい、英語版にはこれらのエラーがあります。英語への翻訳作業をしている編集者が、誤って配列の区切り(,)要素を削除してしまったようです。

 
Stanislav Korotky:

Kaleemは少し古いプラットフォームのバージョンを使っているようです。

しかし、わかりやすくするため、またエラーが起きにくくするために、ソースコードを変更して、text[TOOLTIP1_LINES_TOTAL]とtext[TOOLTIP5_LINES_TOTAL]のように、明示的にサイズを指定して配列を定義するようにすべきです。そうしないと、将来、配列が変更されても定義が省略されない場合に、out of bounds エラーが発生する可能性があります。

私は MetaTrader 4 を使用しています:4.00 Build 950を使用しています。
 
Kaleem Haider:
MetaTrader 4 を使用しています:4.00 Build 950 最新バージョンではないですか?
960が最新バージョンのようです。
 

アナトリー、メインパネルから2つのウインドウを開いて、3つのウインドウをアクティブに保つことは可能ですか?

例:メインパネルがあり、2つの追加パネルを開くためのボタンがあり、それぞれの追加パネルにはボタンやその他のものがあります。

メインパネルのボタン1を押すと、パネル1が開きます。メインパネルのボタンはアクティブのままであり、パネル1上でもアクティブである。

panel1が既に開いている時にメインパネルのbutton2を押す - panel2が開く。メインパネル上、パネル1上、パネル2上のボタンはすべてアクティブのままです。

これにより、移動可能なアクティブ・パネルを持つインナーフェイスを持つことができ、それぞれのパネルが独自の機能を実行します。

一度にアクティブなパネルを1つだけ持つことも可能です。