記事"グラフィカルインタフェースVII: タブコントロール(チャプター2)"についてのディスカッション - ページ 3 123 新しいコメント Mohammad-Reza Yakhyan 2023.01.19 17:32 #21 CLabelアイテムを作成 し、タブに追加しようとすると、コンパイラが次のようなエラーを出します: CLabel m_overview_titlte_label; bool CMainPanel::CreateOverviewTitleLabel(const string text) { //--- パネルオブジェクトを渡す m_overview_title_label.WindowPointer(m_window); //--- 最初のタブグループの4番目のタブに貼り付ける m_main_panel_tabs.AddToElementsArray(0,m_overview_title_label); m_main_panel_tabs.AddToElementsArray( //--- 座標 int x=m_window.X()+OVERVIE_TITLE_LABEL_GAP_X; int y=m_window.Y()+OVERVIE_TITLE_LABEL_GAP_Y; //--- 作成前にプロパティを設定する m_overview_title_label.XSize(140); m_overview_title_label.YSize(18); //m_overview_title_label. //--- コントロールの作成 if(!m_overview_title_label.Create(m_chart_id,text,m_subwin,x,y)) return(false); //--- オブジェクト・グループの共通配列にオブジェクトを追加する。 //CWndContainer::AddToElementsArray(0,m_overview_title_label); return(true); } Compiler Error: 'WindowPointer' - function not defined MainPanel.mqh 233 27 'm_overview_title_label' - parameter conversion not allowed MainPanel.mqh 235 43 'm_overview_title_label' - 期待されるものと同じ型の変数 MainPanel.mqh 235 43 Mohammad-Reza Yakhyan 2023.01.19 21:42 #22 Martin Fischer 関数が ありません。 これらのオブジェクトを作成することはできますが、ウィンドウに添付することができません。 この場合、 は機能しません。 2.) CComboBoxは静的オブジェクトですか。 の要素リストを変更することは可能ですか? ComboBox-Listviewの要素のリストをComboBoxの作成後に変更することは可能ですか?ありがとうございます! 私も同じ問題がありました。インクルード・ファイルを作成して、ラベル・クラスを書いて、それを使うことで解決しました。このファイルはIncludeEasyAndFastGUIに作成する必要があります。 そのコードは //+------------------------------------------------------------------+ //|MyLabel.mqh //|著作権 2023, Sassiz.ルート //|https://t.me/R00T_S4SS12 //+------------------------------------------------------------------+ #property copyright "Copyright 2023, Sassiz.Root" #property link "https://t.me/R00T_S4SS12" #property strict #include "Element.mqh" #include "Window.mqh" //+------------------------------------------------------------------+ //| チェックボックスを作成するクラス| //+------------------------------------------------------------------+ class MyLabel : public CElement { private: //--- 要素がアタッチされているフォームへのポインタ CWindow *m_wnd; //--- チェックボックスを作成するためのオブジェクト CLabel m_label; //--- チェックボックスのテキスト string m_label_text; //--- テキスト・ラベルの余白 int m_label_x_gap; int m_label_y_gap; //--- さまざまな状態におけるテキスト・ラベルの色 color m_label_color; color m_label_color_off; color m_label_color_hover; color m_label_color_locked; color m_label_color_array[]; //--- マウスの左ボタン押下の優先順位 int m_zorder; int m_area_zorder; //--- public: MyLabel(void); ~MyLabel(void); //--- チェックボックスを作成するためのメソッド bool CreateLabel(const long chart_id,const int subwin,const string text,const int x,const int y); //--- private: bool CreateLabel2(void); //--- public: //--- (1) フォームポインタを格納 (2) チェックボックスの状態を返す/設定する void WindowPointer(CWindow &object) { m_wnd=::GetPointer(object); } //--- (1) 背景色、(2) テキストラベルの余白 void LabelXGap(const int x_gap) { m_label_x_gap=x_gap; } void LabelYGap(const int y_gap) { m_label_y_gap=y_gap; } //--- 異なる状態でのテキストの色 void LabelColor(const color clr) { m_label_color=clr; } //--- (1)チェックボックスの説明、(2)チェックボックスボタンの状態を返す/設定する。 string LabelText(void) const { return(m_label.Description()); } //--- 色を変える void ChangeObjectsColor(void); //--- public: //--- チャート・イベント・ハンドラ virtual void OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam); //--- タイマー virtual void OnEventTimer(void); //--- 要素の移動 virtual void Moving(const int x,const int y); //--- (1) 表示、(2) 非表示、(3) リセット、(4) 削除 virtual void Show(void); virtual void Hide(void); virtual void Reset(void); virtual void Delete(void); //--- (1) マウスの左ボタン押下の優先順位の設定、(2) リセット virtual void SetZorders(void); virtual void ResetZorders(void); //--- 色をリセットする virtual void ResetColors(void); virtual void SetText(string text); virtual void SetFontSize(int fontSize); //--- private: //--- エレメントへのプレスの処理 bool OnClickLabel(const string clicked_object); }; //+------------------------------------------------------------------+ //| コンストラクタ| //+------------------------------------------------------------------+ MyLabel::MyLabel(void) : m_label_x_gap(20), m_label_y_gap(2), m_label_color(clrBlack) { //--- エレメント・クラスの名前をベース・クラスに格納する。 CElement::ClassName(CLASS_NAME); //--- マウスの左ボタンクリックの優先順位を設定する。 m_zorder =0; m_area_zorder =1; } //+------------------------------------------------------------------+ //| デストラクタ| //+------------------------------------------------------------------+ MyLabel::~MyLabel(void) { } //+------------------------------------------------------------------+ //| イベント処理| //+------------------------------------------------------------------+ void MyLabel::OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam) { //--- カーソル移動イベントの処理 if(id==CHARTEVENT_MOUSE_MOVE) { //--- 要素が非表示の場合は残す if(!CElement::IsVisible()) return; //--- サブウィンドウの数が一致しない場合は、そのままにしておく。 if(CElement::m_subwin!=CElement::m_mouse.SubWindowNumber()) return; //--- 要素上のフォーカスをチェックする CElement::MouseFocus(m_mouse.X()>X() && m_mouse.X()<X2() && m_mouse.Y()>Y() && m_mouse.Y()<Y2()); return; } //--- オブジェクトに対するマウスの左クリックを処理する。 if(id==CHARTEVENT_OBJECT_CLICK) { //--- チェックボックスを押す if(OnClickLabel(sparam)) return; } } //+------------------------------------------------------------------+ //| タイマー| //+------------------------------------------------------------------+ void MyLabel::OnEventTimer(void) { //--- フォームがブロックされていない場合 if(!m_wnd.IsLocked()) //--- 要素オブジェクトの色を変更する ChangeObjectsColor(); } //+------------------------------------------------------------------+ //| チェックボックスオブジェクトのグループを作成します。| //+------------------------------------------------------------------+ bool MyLabel::CreateLabel(const long chart_id,const int subwin,const string text,const int x,const int y) { //--- フォーム・ポインタがない場合は、そのままにしておく。 if(!CElement::CheckWindowPointer(::CheckPointer(m_wnd))) return(false); //--- 変数の初期化 m_id =m_wnd.LastId()+1; m_chart_id =chart_id; m_subwin =subwin; m_x =x; m_y =y; m_label_text =text; //--- 端からのマージン CElement::XGap(CElement::X()-m_wnd.X()); CElement::YGap(CElement::Y()-m_wnd.Y()); //--- 要素の作成 if(!CreateLabel2()) return(false); //--- ウィンドウがダイアログであるか、最小化されている場合、要素を隠す if(m_wnd.WindowType()==W_DIALOG || m_wnd.IsMinimized()) Hide(); //--- return(true); } //+------------------------------------------------------------------+ //| チェックボックスのラベルを作成する| //+------------------------------------------------------------------+ bool MyLabel::CreateLabel2(void) { //--- オブジェクト名の形成 string name=CElement::ProgramName()+"_lable_"+(string)CElement::Id(); //--- 座標 int x =CElement::X()+m_label_x_gap; int y =CElement::Y()+m_label_y_gap; //--- 状態に応じた文字色 color label_color=clrBlack;//(m_check_button_state) ? m_label_color : m_label_color_off; //--- オブジェクトを設定する if(!m_label.Create(m_chart_id,name,m_subwin,x,y)) return(false); //--- プロパティを設定する m_label.Description(m_label_text); m_label.Font(FONT); m_label.FontSize(FONT_SIZE); m_label.Color(label_color); m_label.Corner(m_corner); m_label.Anchor(m_anchor); m_label.Selectable(false); m_label.Z_Order(m_zorder); m_label.Tooltip("\n"); //--- 端からのマージン m_label.XGap(x-m_wnd.X()); m_label.YGap(y-m_wnd.Y()); //--- グラデーション配列の初期化 CElement::InitColorArray(label_color,m_label_color_hover,m_label_color_array); //--- オブジェクト・ポインタを格納する CElement::AddToArray(m_label); return(true); } //+------------------------------------------------------------------+ | エレメントの移動| //+------------------------------------------------------------------+ void MyLabel::Moving(const int x,const int y) { //--- 要素が非表示の場合は残す if(!CElement::IsVisible()) return; //--- 要素フィールドにインデントを保存する CElement::X(x+XGap()); CElement::Y(y+YGap()); //--- オブジェクトのフィールドに座標を格納する m_label.X(x+m_label.XGap()); m_label.Y(y+m_label.YGap()); //--- グラフィカル・オブジェクトの座標を更新する m_label.X_Distance(m_label.X()); m_label.Y_Distance(m_label.Y()); } //+------------------------------------------------------------------+ //| カーソルをオブジェクトの上に置いたときのオブジェクトの色を変更する。 //+------------------------------------------------------------------+ void MyLabel::ChangeObjectsColor(void) { //--- 要素がブロックされている場合は退出する。 //--- color label_color=clrBlack;//(m_check_button_state) ? m_label_color : m_label_color_off; CElement::ChangeObjectColor(m_label.Name(),CElement::MouseFocus(),OBJPROP_COLOR,label_color,m_label_color_hover,m_label_color_array); } //+------------------------------------------------------------------+ //| コンボボックスを表示| //+------------------------------------------------------------------+ void MyLabel::Show(void) { //--- 要素がすでに表示されている場合は、そのままにしておく。 if(CElement::IsVisible()) return; //--- すべてのオブジェクトを可視化する for(int i=0; i<CElement::ObjectsElementTotal(); i++) CElement::Object(i).Timeframes(OBJ_ALL_PERIODS); //--- 視認性の状態 CElement::IsVisible(true); } //+------------------------------------------------------------------+ //| コンボボックスを隠す| //+------------------------------------------------------------------+ void MyLabel::Hide(void) { //--- 要素がすでに表示されている場合は、そのままにしておく。 if(!CElement::IsVisible()) return; //--- すべてのオブジェクトを隠す for(int i=0; i<CElement::ObjectsElementTotal(); i++) CElement::Object(i).Timeframes(OBJ_NO_PERIODS); //--- 視認性の状態 CElement::IsVisible(false); } //+------------------------------------------------------------------+ //| 再描画| //+------------------------------------------------------------------+ void MyLabel::Reset(void) { //--- ドロップダウン要素の場合は、そのままにしておく。 if(CElement::IsDropdown()) return; //--- 非表示と表示 Hide(); Show(); } //+------------------------------------------------------------------+ | 削除| //+------------------------------------------------------------------+ void MyLabel::Delete(void) { //--- オブジェクトの削除 m_label.Delete(); //--- オブジェクトの配列を空にする CElement::FreeObjectsArray(); //--- デフォルト値による変数の初期化 CElement::MouseFocus(false); CElement::IsVisible(true); } //+------------------------------------------------------------------+ //| 優先順位を決める| //+------------------------------------------------------------------+ void MyLabel::SetZorders(void) { m_label.Z_Order(m_zorder); } //+------------------------------------------------------------------+ //| 優先順位のリセット| //+------------------------------------------------------------------+ void MyLabel::ResetZorders(void) { m_label.Z_Order(0); } //+------------------------------------------------------------------+ //| オブジェクトの色をリセットする。| //+------------------------------------------------------------------+ void MyLabel::ResetColors(void) { //--- 色をリセットする m_label.Color(clrBlack); //--- フォーカスをゼロにする CElement::MouseFocus(false); } //+------------------------------------------------------------------+ //| 要素のヘッダーをクリックする| //+------------------------------------------------------------------+ bool MyLabel::OnClickLabel(const string clicked_object) { //--- マウスカーソルは現在、要素の上にある。 m_label.Color(m_label_color_hover); //--- メッセージを送る ::EventChartCustom(m_chart_id,ON_CLICK_LABEL,CElement::Id(),0,m_label.Description()); return(true); } //+------------------------------------------------------------------+ void MyLabel::SetText(string text){ m_label.Description(text); } void MyLabel::SetFontSize(int fontSize){ m_label.FontSize(fontSize); } そして、このようにMyLabelクラスからオブジェクトを作って、それを使う: //---ラベル MyLabel m_overview_title_label; そして //+------------------------------------------------------------------+ //| 概要タイトルラベルの作成| //+------------------------------------------------------------------+ bool CMainPanel::CreateOverviewTitleLabel(const string text) { //--- パネルオブジェクトを渡す m_overview_title_label.WindowPointer(m_window); //--- 最初のタブグループの4番目のタブに取り付ける m_main_panel_tabs.AddToElementsArray(0,m_overview_title_label); //--- 座標 int x=m_window.X()+OVERVIE_TITLE_LABEL_GAP_X; int y=m_window.Y()+OVERVIE_TITLE_LABEL_GAP_Y; //--- 作成前にプロパティを設定する m_overview_title_label.XSize(140); m_overview_title_label.YSize(18); m_overview_title_label.SetText(text); m_overview_title_label.SetFontSize(18); //m_overview_title_label. //--- コントロールの作成 if(!m_overview_title_label.CreateLabel(m_chart_id,m_subwin,text,x,y)) return(false); //--- オブジェクト・グループの共通配列にオブジェクトを追加する。 CWndContainer::AddToElementsArray(0,m_overview_title_label); return(true); } matinz 2025.04.14 11:11 #23 タブの数を増やすと、縦であれ横であれ、スクロールができなくなり、ウィンドウが限界を超えて広がり、効率が落ちる。 123 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
CLabelアイテムを作成 し、タブに追加しようとすると、コンパイラが次のようなエラーを出します:
Compiler Error:
'WindowPointer' - function not defined MainPanel.mqh 233 27
'm_overview_title_label' - parameter conversion not allowed MainPanel.mqh 235 43
ComboBox-Listviewの要素のリストをComboBoxの作成後に変更することは可能ですか?
ありがとうございます!
私も同じ問題がありました。インクルード・ファイルを作成して、ラベル・クラスを書いて、それを使うことで解決しました。このファイルはIncludeEasyAndFastGUIに作成する必要があります。
そのコードは
そして、このようにMyLabelクラスからオブジェクトを作って、それを使う:
//---ラベル MyLabel m_overview_title_label;そして