記事"任意の複雑さのレベルのグラフィカルなパネルを作成する方法"についてのディスカッション - ページ 5

 
ウラジミール・カルプトフ
ウラジミール なぜ1つのパネルを閉じると、両方のパネルが閉じてしまうのですか?
#include <Controls\Dialog.mqh>

CAppDialog AppWindow;
CAppDialog AppWindow2;

int OnInit()
  {
//--- アプリケーション・ダイアログの作成
   if(!AppWindow.Create(0,"AppWindow",0,20,20,360,324))
      return(INIT_FAILED);
   if(!AppWindow2.Create(0,"AppWindow",0,20+400,20,360+400,324))
      return(INIT_FAILED);
//--- アプリケーションの実行
   AppWindow.Run();
   AppWindow2.Run();
   return(INIT_SUCCEEDED);
  }

void OnDeinit(const int reason)
  {
//--- ダイアログを破壊する
   AppWindow.Destroy(reason);
   AppWindow2.Destroy(reason);
  }
//+------------------------------------------------------------------+
//| チャートイベント機能|
//+------------------------------------------------------------------+
void OnChartEvent(const int id,         // イベントID 
                  const long& lparam,   // ロング・タイプのイベント・パラメーター
                  const double& dparam, // double型のイベントパラメータ
                  const string& sparam) // 文字列型のイベント・パラメーター
  {
   AppWindow.ChartEvent(id,lparam,dparam,sparam);
   AppWindow2.ChartEvent(id,lparam,dparam,sparam);
  }
//+------------------------------------------------------------------+
Vladimir Karputov
Vladimir Karputov
  • www.mql5.com
Люди. Граждане! Огромная просьба - заполняйте свой профиль на сайте и пользуйтесь стандартными программами - устанавливайте Skype. У Skype есть очень полезная функция - показ рабочего стола. В таком случае можно оперативно подсказать по возникшей проблеме. Помните - время - деньги! Древняя народная мудрость гласит: если хочешь помочь...
 
Ruslan Khasanov:
AppWindow、AppWindow1など、各ウィンドウに異なる名前を設定します。

これらはすでに異なる名前を持っている

スクリーン

文字列

if(!AppWindow2.Create(0,"AppWindow2",0,20+400,20,360+400,324))

を変更しても何も変わりません。
それとも、何か別の意味があるのですか?

 
そうだ、勘違いだ...。
 
peterlogin:
*** これを避けるには?

一人のアドバイザー、一人のパネル。

 
例えば、線の上に:
例
 
peterlogin:
パネルを、パネル自体よりも後に作られたオブジェクトの上に置くにはどうすればよいですか?例えば、線の上に


パネルが作成された後にグラフィカル・オブジェクトを作成 しないでください。

または、パネルを折りたたむ/展開する。
Документация по MQL5: Графические объекты / ObjectCreate
Документация по MQL5: Графические объекты / ObjectCreate
  • www.mql5.com
[in]  Номер подокна графика. 0 означает главное окно графика. Указанное подокно должно существовать, в противном случае функция возвращает false. Возвращает true при успешной постановке команды в очередь указанного графика, иначе false. Если объект был уже создан ранее, то производится попытка изменить его координаты. При вызове ObjectCreate...
 
このトピックに関係のないコメントは、「MQL5 MT5 MetaTrader 5 初心者からの質問」に移動しました。
 

やあ、みんな、

独学者の質問です!

ライブラリでパネルを作成するとき、左上とは異なるコーナーにパネルを配置するにはどうすればいいでしょうか?

OBJ_PROP_Cornerをいじってみましたが、Panel.AlignとPanel.Alignmentを使えばもっといい方法があると思います。いろいろ試してみましたが、プログラマーでない私には、どのパラメータを どのように渡せばよいのかわかりません。例えば、Panel.Alignment(CRect &rect) これらのRectは何を意味するのでしょうか?

どんなことでも結構です。


ありがとうございました。

ディエゴ

 
Diego :

やあ、みんな、

独学者からの質問です!

ライブラリを使ってパネルを作成するとき、どのようにしてパネルを左上とは異なるコーナーに配置するのでしょうか?

OBJ_PROP_Cornerをいじりましたが、Panel.AlignとPanel.Alignmentを使うもっと良い方法があると思います。いろいろ試してみましたが、プログラマーでない私には、どのパラメータをどのように渡せばよいのかわかりません。例えば、Panel.Alignment(CRect &rect) これらのRectは何を意味するのでしょうか?

どんなことでも結構です。


乾杯

ディエゴ

パネルの作成時に座標を指定 します。ファイルAppWindowEditDefine.mq5の例

//+------------------------------------------------------------------+
//| エキスパート初期化関数|
//+------------------------------------------------------------------+
int OnInit()
  {
   
***
//--- アプリケーション・ダイアログの作成
   if(!ExtDialog.Create(0,"AppWindow Edit Define",0,40,40,380,344))
      return(INIT_FAILED);
//--- アプリケーションの実行
 

Destroy() 関数が機能しないことがよくあることに気づきました。特にタイムフレームが急激に変化する場合、ExpertDeinit() 関数が呼び出された後、チャート上にオブジェクトが残ってしまいます。

簡単な回避策は、CAppDialog オブジェクトを直接作成、変更、破棄するのではなく、ポインタを使用する ことです。

CAppDialog AppWindow;		//Declare CAppDialog object

AppWindow.Destroy(...);		//Destroy Window object(s)

上記の関数はこのようになる:

CAppDialog *AppWindow;		//Declare CAppDialog pointer
AppWindow = new CAppDialog();	//Create new CAppDialog object at ptr address

AppWindow.Destroy(...);		//Destroy Window object(s)
delete AppWindow;		//Set the "delete" flag for objects at the ptr address (in case *.Destroy() fails)
AppWindow = NULL;		//Set the ptr address to NULL

カスタム・ウィンドウ・クラスを作成した後、ボタン、パネル、その他のオブジェクトをこのように作成、破棄します。魅力的に動作する!


*注:削除 フラグとポインタをNULLに 設定するのはやりすぎかもしれませんが、実装してからオブジェクトが余ったことはありません。

Documentation on MQL5: Checkup / Point
Documentation on MQL5: Checkup / Point
  • www.mql5.com
Checkup / Point - Reference on algorithmic/automated trading language for MetaTrader 5