記事"任意の複雑さのレベルのグラフィカルなパネルを作成する方法"についてのディスカッション - ページ 12 1...567891011121314 新しいコメント Quan tum 2021.09.02 09:06 #111 Vladimir Karputov #:それは禁じられている。パネルはチャートにリンクしている。 ありがとうございます。なるほど。 もうひとつ質問させてください。 このような表を表示するパネルを作りたいのですが でも、下のコントロールしか見つからないのですが、これはパネルがテーブルの作成をサポートできないということでしょうか? CLabel テキストラベル」グラフィックオブジェクトに基づくコントロール CBmpButton ビットマップラベル」グラフィックオブジェクトに基づくコントロール CButton ボタン」グラフィックオブジェクトを元にしたコントロール CEdit Edit field" グラフィックオブジェクトを元にしたコントロール。 CPanel 長方形ラベル" を元にしたコントロール。 CPicture ビットマップラベル" に基づくコントロール。 Documentation on MQL5: Standard Library / Panels and Dialogs / CEdit www.mql5.com CEdit - Panels and Dialogs - Standard Library - MQL5 Reference - Reference on algorithmic/automated trading language for MetaTrader 5 Vladimir Karputov 2021.09.02 09:09 #112 Quan tum # :ありがとうございます。なるほど。もうひとつ質問してもいいですか?次のような表を表示するパネルを作りたいのですが。 しかし、私は下のコントロールしか見つけることができません、それはパネルがテーブルを作成するためにサポートすることができないということですか、ありがとうございます。 CLabel テキストラベル」グラフィックオブジェクトに基づくコントロール CBmpButton ビットマップラベル」グラフィックオブジェクトに基づくコントロール CButton ボタン」グラフィックオブジェクトを元にしたコントロール CEdit Edit field" グラフィックオブジェクトを元にしたコントロール。 CPanel 長方形ラベル" を元にしたコントロール。 CPicture ビットマップラベル" に基づくコントロール。 自分でテーブルを作成する必要があります。ArticlesやCodeBaseで例を探してください。 Quan tum 2021.09.02 09:15 #113 Vladimir Karputov #:自分でテーブルを作る必要がある。ArticlesやCodeBaseで例を探してください。 わかりました、ありがとうございます。そう思います。 アーティクルやコードベースで探してみます。 本当に ありがとう ございました。 Noralden mama 2021.11.15 09:25 #114 好き Vasiliy Pushkaryov 2021.12.21 10:12 #115 パネルにリンクせずに、チャート上だけに垂直スクロールバーを作ろうとしているのですが、なぜかうまくいきません。 例えば、チェックボックスの場合、このコードはマウスクリックに反応します。目盛りが表示されたり消えたりする。 #include <Controls\CheckBox.mqh> CCheckBox Chbox; //+------------------------------------------------------------------+ void OnInit() { Chbox.Create(0, "MyCheckBox", 0, 20, 20, 100, 40); ChartRedraw(); } //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long& lparam, const double& dparam, const string& sparam) { Chbox.OnEvent(id, lparam, dparam, sparam); } //+------------------------------------------------------------------+ しかし、垂直スクロールでは、マウス・クリックに反応しません。 #include <Controls\Scrolls.mqh> CScrollV Scroll; void OnInit() { Scroll.Create(0, "MyScrollV", 0, 20, 20, 40, 200); ChartRedraw(); } //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long& lparam, const double& dparam, const string& sparam) { Scroll.OnEvent(id, lparam, dparam, sparam); } //+------------------------------------------------------------------+ この結合要素をチャート上で動作させる方法をご存知の方、教えていただけませんか? Nextor 2022.03.16 20:01 #116 例えば、「 すべてのポジションを閉じる」というボタンがあるパネルを作りました。このボタンをクリックすると、「よろしいですか?はい/いいえ。これを実装するには? 現在CAppDialogを継承して、Ok/Cancelボタンを持つ小さなフォームを作りました。Okボタンをクリックすると、次の行が追加されます。 gDialogForm.Destroy(); ChartRedraw(); どうすれば直りますか? Vitaly Muzichenko 2022.03.16 20:04 #117 Nextor 「 すべてのポジションを閉じる」というボタンがあるパネルを作りました。このボタンをクリックすると、「よろしいですか?はい/いいえ。どのように実装しますか? 現在CAppDialogを継承して、Ok/Cancelボタンを持つ小さなフォームを作りました。Ok "ボタンをクリックすると、次の行が追加される。 どうすれば直りますか? void OnChartEvent(const int id, // イベントID const long& lparam, // 長いイベント型のパラメータ const double& dparam, // double event型のパラメータ const string& sparam // 文字列イベント型のパラメータ ) { // すべてのアカウントを閉じる if(id==CHARTEVENT_OBJECT_CLICK && StringFind(sparam,"ClosePos",0)!=-1)) { int MB=MessageBox("Close All Positions\nAccount Profit= "+DoubleToString(AccountInfoDouble(ACCOUNT_PROFIT),2), "Close All Positions?", MB_OKCANCEL|MB_ICONQUESTION); if(MB==1) ClosePosSortProfit("", -1, -1, clrGray); } } Vasiliy Pushkaryov 2022.03.16 20:08 #118 Nextor 「 すべてのポジションを閉じる」というボタンがあるパネルを作りました。このボタンをクリックすると、「よろしいですか?はい/いいえ。どのように実装しますか? 現在CAppDialogを継承して、Ok/Cancelボタンを持つ小さなフォームを作りました。Ok "ボタンをクリックすると、次の行が追加される。 どうすれば直りますか? 多分、この コメントが役に立つと思います。 Vladimir Karputov 2022.03.17 05:11 #119 Nextor 「 すべてのポジションを閉じる」というボタンがあるパネルを作りました。このボタンをクリックすると、「よろしいですか?はい/いいえ。どのように実装しますか? 現在CAppDialogを継承して、Ok/Cancelボタンを持つ小さなフォームを作りました。Ok "ボタンをクリックすると、次の行が追加される。 どうすれば直りますか? Close On Chart Panelの例を参考に、クリック・ハンドラに'MessageBox'呼び出しを挿入します。 Close On Chart Panel Dialog.mqh'ファイルに以下の変更を加える: //+------------------------------------------------------------------+ //| イベントハンドラ| //+------------------------------------------------------------------+ void CControlsDialog::OnClickButton1(void) { int answer=MessageBox("Close all Sell?","Close all Sell",MB_OKCANCEL|MB_ICONQUESTION); if(answer==IDOK) { Print(__FUNCTION__); m_trading_engine.ClosePositions(POSITION_TYPE_SELL); } } //+------------------------------------------------------------------+ //| イベントハンドラ| //+------------------------------------------------------------------+ void CControlsDialog::OnClickButton2(void) { int answer=MessageBox("Close all Buy?","Close all Buy",MB_OKCANCEL|MB_ICONQUESTION); if(answer==IDOK) { Print(__FUNCTION__); m_trading_engine.ClosePositions(POSITION_TYPE_BUY); } } //+------------------------------------------------------------------+ //| イベントハンドラ| //+------------------------------------------------------------------+ void CControlsDialog::OnClickButton3(void) { int answer=MessageBox("Close all Profit?","Close all Profit",MB_OKCANCEL|MB_ICONQUESTION); if(answer==IDOK) { Print(__FUNCTION__); m_trading_engine.CloseProfitPositions(); } } //+------------------------------------------------------------------+ //| イベントハンドラ| //+------------------------------------------------------------------+ void CControlsDialog::OnClickButton4(void) { int answer=MessageBox("Close all Loss?","Close all Loss",MB_OKCANCEL|MB_ICONQUESTION); if(answer==IDOK) { Print(__FUNCTION__); m_trading_engine.CloseLossPositions(); } } 結果 Close On Chart Panel www.mql5.com Советник-утилита. Панель на базе класса CDialog. Кнопки на базе класса СButton. Четыре кнопки для закрытия BUY, SELL, всех прибыльных, всех убыточных. Работа по текущему символу Seyedmasoud Hashemi 2022.08.13 23:35 #120 こんにちは、素晴らしいチュートリアルをありがとうございます。 私のパネルでは、1つのボタンをクリックすると、もう1つのボタンは無効と非表示になるはずですが、非表示ボタンの領域をクリックすると非表示になります。 私のコードをここに書きました。 インジケータ //+------------------------------------------------------------------+ //|Indicator_Q_Test.mq4 //| Copyright 2020, MetaQuotes Software Corp.| //|https://www.mql5.com //+------------------------------------------------------------------+ #property copyright "Copyright 2020, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict #property indicator_chart_window #include <WinUser32.mqh> #include "PanelDialog_Q.mqh" CPanelDialogQ ExtDialog; //+------------------------------------------------------------------+ //| カスタムインジケータ初期化関数 //+------------------------------------------------------------------+ int OnInit() { //--- インジケータ・バッファのマッピング if(!ExtDialog.CreateQ(0,"Question",0,100,100,400,230,"This the test Question?")) return(INIT_FAILED); //--- アプリケーションの実行 if(!ExtDialog.Run()) return(INIT_FAILED); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| カスタム・インジケータ反復関数| //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- //--- 次の呼び出しのためにprev_calculatedの値を返す return(rates_total); } //+------------------------------------------------------------------+ //| チャートイベント機能| //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { //--- ExtDialog.ChartEvent(id,lparam,dparam,sparam); } //+------------------------------------------------------------------+ void OnDeinit(const int reason) { ExtDialog.Destroy(reason); } クラス: //+------------------------------------------------------------------+ //|PanelDialog.mqh //| Copyright 2009-2015, MetaQuotes Software Corp.| //|http://mql5.commql5.com //+------------------------------------------------------------------+ #include <Controls\Dialog.mqh> #include <Controls\Button.mqh> #include <Controls\Edit.mqh> #include <Controls\ListView.mqh> #include <Controls\ComboBox.mqh> #include <Controls\SpinEdit.mqh> #include <Controls\RadioGroup.mqh> #include <Controls\CheckGroup.mqh> #include <Controls\Label.mqh> #include <Controls\Scrolls.mqh> //+------------------------------------------------------------------+ |定義| //+------------------------------------------------------------------+ //--- インデントとギャップ #define INDENT_LEFT_ScrollQ (11) // 左からインデント (ボーダーの幅を考慮) (スクロールバーのみ) #define INDENT_LEFTQ (11) // 左からインデントする(ボーダーの幅を考慮する) #define INDENT_TOPQ (11) // 上からインデント(ボーダーの幅に余裕を持たせる) #define INDENT_RIGHTQ (11) // 右からインデントする(ボーダーの幅を考慮する) #define INDENT_BOTTOMQ (11) // 下からインデントする(ボーダーの幅を考慮する) #define CONTROLS_GAP_XQ (80) // X座標によるギャップ #define CONTROLS_GAP_YQ (40) // Y座標によるギャップ //--- ボタン用 #define BUTTON_WIDTHQ (60) // X座標によるサイズ #define BUTTON_HEIGHTQ (20) // Y座標によるサイズ //--- 表示エリア #define EDIT_HEIGHTQ (20) // Y座標によるサイズ #define GROUP_WIDTHQ (150) // X座標によるサイズ #define LIST_HEIGHTQ (379) // Y座標によるサイズ #define RADIO_HEIGHTQ (56) // Y座標によるサイズ #define CHECK_HEIGHTQ (93) // Y座標によるサイズ //+------------------------------------------------------------------+ //| クラス CPanelDialog| //| 使い方: SimplePanelアプリケーションのメインダイアログ。 //+------------------------------------------------------------------+ class CPanelDialogQ : public CAppDialog { private: CLabel m_Label_Q_text; CButton m_button_Yes; CButton m_button_No; //**************************************************** public: CPanelDialogQ(void); ~CPanelDialogQ(void); //--- 作成 virtual bool CreateQ(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2,string QText); //--- チャート・イベント・ハンドラ virtual bool OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam); protected: //--- 依存コントロールを作成する bool CreateLabel_Q_text(string QT); bool CreateButton_Yes(void); bool CreateButton_No(void); void OnClick_button_Yes(void); void OnClick_button_No(void); }; //+------------------------------------------------------------------+ //| イベントハンドリング| //+------------------------------------------------------------------+ EVENT_MAP_BEGIN(CPanelDialogQ) //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ ON_EVENT(ON_CLICK,m_button_Yes,OnClick_button_Yes) ON_EVENT(ON_CLICK,m_button_No,OnClick_button_No) //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ EVENT_MAP_END(CAppDialog) //+------------------------------------------------------------------+ //| コンストラクタ| //+------------------------------------------------------------------+ CPanelDialogQ::CPanelDialogQ(void) { } //+------------------------------------------------------------------+ //| デストラクタ| //+------------------------------------------------------------------+ CPanelDialogQ::~CPanelDialogQ(void) { } //+------------------------------------------------------------------+ |作成| //+------------------------------------------------------------------+ bool CPanelDialogQ::CreateQ(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2,string QText) { if(!CAppDialog::Create(chart,name,subwin,x1,y1,x2,y2)) return(false); //--- 依存コントロールを作成する if(!CreateLabel_Q_text(QText)) return(false); if(!CreateButton_Yes()) return(false); if(!CreateButton_No()) return(false); //--- 成功 return(true); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ bool CPanelDialogQ::CreateLabel_Q_text(string QT) { //--- 座標 int x1=INDENT_LEFTQ; int y1=INDENT_TOPQ; int x2=ClientAreaWidth()-(INDENT_RIGHTQ+BUTTON_WIDTHQ+CONTROLS_GAP_XQ); int y2=y1+EDIT_HEIGHTQ; //--- 作成 if(!m_Label_Q_text.Create(m_chart_id,"QT",m_subwin,x1,y1,x2,y2)) return(false); if(!m_Label_Q_text.Text(QT)) return(false); if(!m_Label_Q_text.FontSize(12)) return(false); if(!m_Label_Q_text.Color(clrBlack)) return(false); if(!m_Label_Q_text.ColorBorder(clrBlack)) return(false); if(!m_Label_Q_text.ColorBackground(clrBlack)) return(false); // if(!m_edit.ReadOnly(true)) // return(false); if(!Add(m_Label_Q_text)) return(false); m_Label_Q_text.Alignment(WND_ALIGN_WIDTH,INDENT_LEFTQ,0,INDENT_RIGHTQ+BUTTON_WIDTHQ+CONTROLS_GAP_XQ,0); //--- 成功 return(true); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ bool CPanelDialogQ::CreateButton_Yes(void) { //--- 座標 int x1=INDENT_LEFTQ; int y1=INDENT_TOPQ+CONTROLS_GAP_YQ; int x2=x1+BUTTON_WIDTHQ; int y2=y1+BUTTON_HEIGHTQ; //--- 作成 if(!m_button_Yes.Create(m_chart_id,m_name+"Yes",m_subwin,x1,y1,x2,y2)) return(false); if(!m_button_Yes.Text("Yes")) return(false); if(!Add(m_button_Yes)) return(false); m_button_Yes.Alignment(WND_ALIGN_RIGHT,0,0,INDENT_RIGHTQ+CONTROLS_GAP_XQ*2,0); //--- 成功 return(true); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ bool CPanelDialogQ::CreateButton_No(void) { //--- 座標 int x1=INDENT_LEFTQ+CONTROLS_GAP_XQ; int y1=INDENT_TOPQ+CONTROLS_GAP_YQ; int x2=x1+BUTTON_WIDTHQ; int y2=y1+BUTTON_HEIGHTQ; //--- 作成 if(!m_button_No.Create(m_chart_id,m_name+"NO",m_subwin,x1,y1,x2,y2)) return(false); if(!m_button_No.Text("NO")) return(false); if(!Add(m_button_No)) return(false); m_button_No.Alignment(WND_ALIGN_RIGHT,0,0,INDENT_RIGHTQ+CONTROLS_GAP_XQ*1,0); //--- 成功 return(true); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ void CPanelDialogQ::OnClick_button_Yes(void) { Print("OnClick_button_Yes", "Last Error: ",GetLastError()); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ void CPanelDialogQ::OnClick_button_No(void) { Print("OnClick_button_No", "Last Error: ",GetLastError()); m_button_Yes.Hide(); m_button_Yes.Disable(); m_button_Yes.Deactivate(); } //+------------------------------------------------------------------+ 1...567891011121314 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
それは禁じられている。パネルはチャートにリンクしている。
ありがとうございます。なるほど。
もうひとつ質問させてください。
このような表を表示するパネルを作りたいのですが
でも、下のコントロールしか見つからないのですが、これはパネルがテーブルの作成をサポートできないということでしょうか?
CLabel
テキストラベル」グラフィックオブジェクトに基づくコントロール
CBmpButton
ビットマップラベル」グラフィックオブジェクトに基づくコントロール
CButton
ボタン」グラフィックオブジェクトを元にしたコントロール
CEdit
Edit field" グラフィックオブジェクトを元にしたコントロール。
CPanel
長方形ラベル" を元にしたコントロール。
CPicture
ビットマップラベル" に基づくコントロール。
ありがとうございます。なるほど。
もうひとつ質問してもいいですか?
次のような表を表示するパネルを作りたいのですが。
しかし、私は下のコントロールしか見つけることができません、それはパネルがテーブルを作成するためにサポートすることができないということですか、ありがとうございます。
CLabel
テキストラベル」グラフィックオブジェクトに基づくコントロール
CBmpButton
ビットマップラベル」グラフィックオブジェクトに基づくコントロール
CButton
ボタン」グラフィックオブジェクトを元にしたコントロール
CEdit
Edit field" グラフィックオブジェクトを元にしたコントロール。
CPanel
長方形ラベル" を元にしたコントロール。
CPicture
ビットマップラベル" に基づくコントロール。
自分でテーブルを作成する必要があります。ArticlesやCodeBaseで例を探してください。
自分でテーブルを作る必要がある。ArticlesやCodeBaseで例を探してください。
わかりました、ありがとうございます。そう思います。
アーティクルやコードベースで探してみます。
本当に ありがとう ございました。
パネルにリンクせずに、チャート上だけに垂直スクロールバーを作ろうとしているのですが、なぜかうまくいきません。
例えば、チェックボックスの場合、このコードはマウスクリックに反応します。目盛りが表示されたり消えたりする。
しかし、垂直スクロールでは、マウス・クリックに反応しません。
この結合要素をチャート上で動作させる方法をご存知の方、教えていただけませんか?
例えば、「 すべてのポジションを閉じる」というボタンがあるパネルを作りました。このボタンをクリックすると、「よろしいですか?はい/いいえ。これを実装するには?
現在CAppDialogを継承して、Ok/Cancelボタンを持つ小さなフォームを作りました。Okボタンをクリックすると、次の行が追加されます。
gDialogForm.Destroy(); ChartRedraw();どうすれば直りますか?
現在CAppDialogを継承して、Ok/Cancelボタンを持つ小さなフォームを作りました。Ok "ボタンをクリックすると、次の行が追加される。
どうすれば直りますか?
現在CAppDialogを継承して、Ok/Cancelボタンを持つ小さなフォームを作りました。Ok "ボタンをクリックすると、次の行が追加される。
どうすれば直りますか?
現在CAppDialogを継承して、Ok/Cancelボタンを持つ小さなフォームを作りました。Ok "ボタンをクリックすると、次の行が追加される。
どうすれば直りますか?
Close On Chart Panelの例を参考に、クリック・ハンドラに'MessageBox'呼び出しを挿入します。
Close On Chart Panel Dialog.mqh'ファイルに以下の変更を加える:
結果
こんにちは、素晴らしいチュートリアルをありがとうございます。
私のパネルでは、1つのボタンをクリックすると、もう1つのボタンは無効と非表示になるはずですが、非表示ボタンの領域をクリックすると非表示になります。
私のコードをここに書きました。
インジケータ
クラス: