記事"グラフィカルインタフェースVI:チェックボックスコントロール、編集コントロールとその混合型(チャプター 1)"についてのディスカッション - ページ 2 1234 新しいコメント Anatoli Kazharski 2016.10.05 12:20 #11 Thomas Schwabhäuser:...ヒントをありがとう! この機能を追加します。このシリーズの今後の記事をお楽しみに。 Pavel Kolchin 2016.12.26 17:33 #12 あなたの例では、常にid、lparam、dparam、sparamが出力されています。 if(id==CHARTEVENT_CUSTOM+ON_END_EDIT) { ::Print(__FUNCTION__," > id: ",id,"; lparam: ",lparam,"; dparam: ",dparam,"; sparam: ",sparam); //Print(m_spin_edit1.GetValue()); }以下のようになりますTestLibrary (NZDUSD,H1) CProgram::OnEvent > id: 1020; lparam: 12; dparam: -1.0; sparam: Spin Edit 1:id - 要素の識別子lparam - ?dparam - ?sparam - 要素名入力フィールドを考えて います。もちろん、入力された値を取得するのは興味深いことですが、それを可能な限り高速に行うにはどうすればよいでしょうか? Discussion of article "Graphical Discussion of article "Graphical 記事"グラフィカルインタフェースVIII: ファイルナビゲータコントロール(チャプター3)"についてのディスカッション Anatoli Kazharski 2016.12.26 18:10 #13 Pavel Kolchin:あなたの例では、常にid、lparam、dparam、sparamが出力されています。...id - 要素の識別子lparam - ?dparam - ?sparam - 要素名コントロールが生成するメッセージとパラメータは,ほとんどの場合,以下のような意味です.id - イベント識別子.lparam - 要素識別子.dparam - 要素インデックス.sparam - ライブラリユーザーによって指定された表示テキスト(要素名)。各要素のイベント・パラメーターのセットを示す表は、後で用意します。Pavel Kolchin: ...入力フィールドを考えて みましょう。もちろん、入力された値を取得するのは興味深いことです。CSpinEdit::GetValue()メソッドを使用するだけで、入力フィールドの現在の値を取得できます。例//--- 入力フィールドからのイベントが到着した。 if(id==CHARTEVENT_CUSTOM+ON_END_EDIT) { //--- 項目IDが最初の入力フィールドのものである場合 if(lparam==m_spin_edit1.Id()) { //--- その値を出力する Print("m_spin_edit1.GetValue(): ",m_spin_edit1.GetValue()); } //--- return; } Pavel Kolchin 2016.12.27 05:19 #14 もし名前がわからなかったり、フィールドが100個もあったりしたら、idを使ったメソッドがあるかもしれないし、this.GetValue()の ようなものがあるかもしれない。 Anatoli Kazharski 2016.12.27 05:31 #15 Pavel Kolchin: もし名前がわからなかったり、フィールドが100個もあったりしたら、idを使ったメソッドがあるかもしれないし、this.GetValue()の ようなものがあるかもしれない。 各要素はそれぞれ固有の要素IDを持っているわけです。 Pavel Kolchin 2016.12.27 06:15 #16 Anatoli Kazharski: だから、各要素はそれぞれ固有の要素識別子を持つ。if(id==CHARTEVENT_CUSTOM+ON_END_EDIT){ if(lparam==m_spin_edit1.Id()){Print(m_spin_edit1.GetValue());} if(lparam==m_spin_edit2.Id()){Print(m_spin_edit2.GetValue());} if(lparam==m_spin_edit3.Id()){Print(m_spin_edit3.GetValue());} if(lparam==m_spin_edit4.Id()){Print(m_spin_edit4.GetValue());} if(lparam==m_spin_edit5.Id()){Print(m_spin_edit5.GetValue());} if(lparam==m_spin_edit6.Id()){Print(m_spin_edit6.GetValue());} if(lparam==m_spin_edit7.Id()){Print(m_spin_edit7.GetValue());} if(lparam==m_spin_edit8.Id()){Print(m_spin_edit8.GetValue());} if(lparam==m_spin_edit9.Id()){Print(m_spin_edit9.GetValue());} ...}私はそのようなコードを書かないつもりだった。if(id==CHARTEVENT_CUSTOM+ON_END_EDIT){ Print(GetValue(lparam)); или Print(this.GetValue());}しかし、私はフィールドの数が多くないので、最初のオプションで十分です。 Anatoli Kazharski 2016.12.27 11:55 #17 Pavel Kolchin:...私はそのようなコードを書かないつもりだった。if(id==CHARTEVENT_CUSTOM+ON_END_EDIT){ Print(GetValue(lparam)); или Print(this.GetValue());} 全要素の全ゲット・メソッドに対してそれを行う方法はまだ持っていない。でも考えてみます。 Alexander Fedosov 2017.01.27 11:27 #18 //+------------------------------------------------------------------+//| チャートイベント機能|//+------------------------------------------------------------------+void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { program.ChartEvent(id,lparam,dparam,sparam); if(lparam==program.m_checkbox.Id()) if(program.m_checkbox.CheckButtonState()) { program.m_checkbox.LabelColor(clrGreen); } else { program.m_checkbox.LabelColor(clrRed); } }//+------------------------------------------------------------------+ 簡単な作業です。チェックボックスをクリックしたときのラベルの色を変える。チェックあり-緑文字、チェックなし-赤文字。うまくいかない。チェックを外すと青になり、チェックを入れても青のままです。 Discussion of article "Graphical Resize Chart Window event expert advisor - miscellaneous Anatoli Kazharski 2017.01.27 11:46 #19 Alexander Fedosov: 簡単な作業です。チェックボックスをクリックしたときのラベルの色を変える。チェックあり-緑文字、チェックなし-赤文字。うまくいかない。チェックを外すと青になり、チェックを入れても青のままです。アイテムがインストールされる前にのみ、異なる状態に色を設定できるようになりました(下の例)://+------------------------------------------------------------------+//| チェックボックス1を作成する|//+------------------------------------------------------------------+bool CProgram::CreateCheckBox1(const int x_gap,const int y_gap,string text) {//--- ウィンドウ・ポインタを保存する m_checkbox1.WindowPointer(m_window1);//--- 作成前にプロパティを設定する m_checkbox1.XSize(90); m_checkbox1.YSize(18); m_checkbox1.LabelColor(clrGreen); m_checkbox1.LabelColorOff(clrRed); m_checkbox1.LabelColorHover(clrCornflowerBlue); m_checkbox1.LabelColorLocked(clrSilver);//--- コントロールの作成 if(!m_checkbox1.CreateCheckBox(m_chart_id,m_subwin,text,x_gap,y_gap)) return(false);//--- オブジェクト・グループの共通配列にオブジェクトを追加する。 CWndContainer::AddToElementsArray(0,m_checkbox1); return(true); } Discussion of article "Graphical 記事"グラフィカルインタフェース V:コンボボックス要素(チャプター 3)"についてのディスカッション 記事"グラフィカルインタフェースX: 標準チャートコントロール(ビルド4)"についてのディスカッション Artyom Trishkin 2017.01.27 11:47 #20 Alexander Fedosov://+------------------------------------------------------------------+//| チャートイベント機能|//+------------------------------------------------------------------+void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { program.ChartEvent(id,lparam,dparam,sparam); if(lparam==program.m_checkbox.Id()) if(program.m_checkbox.CheckButtonState()) { program.m_checkbox.LabelColor(clrGreen); } else { program.m_checkbox.LabelColor(clrRed); } }//+------------------------------------------------------------------+ 簡単な作業です。チェックボックスをクリックしたときのラベルの色を変える。チェックあり-緑文字、チェックなし-赤文字。うまくいかない。チェックを外すと青になり、チェックを入れても青のままです。どうでしょう? if(lparam==program.m_checkbox.Id()) { if(program.m_checkbox.CheckButtonState()) program.m_checkbox.LabelColor(clrGreen); else program.m_checkbox.LabelColor(clrRed); } 1234 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
...
ヒントをありがとう!
この機能を追加します。このシリーズの今後の記事をお楽しみに。
あなたの例では、常にid、lparam、dparam、sparamが出力されています。
if(id==CHARTEVENT_CUSTOM+ON_END_EDIT)
{
::Print(__FUNCTION__," > id: ",id,"; lparam: ",lparam,"; dparam: ",dparam,"; sparam: ",sparam);
//Print(m_spin_edit1.GetValue());
}
以下のようになります
TestLibrary (NZDUSD,H1) CProgram::OnEvent > id: 1020; lparam: 12; dparam: -1.0; sparam: Spin Edit 1:
id - 要素の識別子
lparam - ?
dparam - ?
sparam - 要素名
入力フィールドを考えて います。もちろん、入力された値を取得するのは興味深いことですが、それを可能な限り高速に行うにはどうすればよいでしょうか?
あなたの例では、常にid、lparam、dparam、sparamが出力されています。
...
id - 要素の識別子
lparam - ?
dparam - ?
sparam - 要素名
コントロールが生成するメッセージとパラメータは,ほとんどの場合,以下のような意味です.
各要素のイベント・パラメーターのセットを示す表は、後で用意します。
...
入力フィールドを考えて みましょう。もちろん、入力された値を取得するのは興味深いことです。
CSpinEdit::GetValue()メソッドを使用するだけで、入力フィールドの現在の値を取得できます。
例
if(id==CHARTEVENT_CUSTOM+ON_END_EDIT)
{
//--- 項目IDが最初の入力フィールドのものである場合
if(lparam==m_spin_edit1.Id())
{
//--- その値を出力する
Print("m_spin_edit1.GetValue(): ",m_spin_edit1.GetValue());
}
//---
return;
}
もし名前がわからなかったり、フィールドが100個もあったりしたら、idを使ったメソッドがあるかもしれないし、this.GetValue()の ようなものがあるかもしれない。
だから、各要素はそれぞれ固有の要素識別子を持つ。
if(id==CHARTEVENT_CUSTOM+ON_END_EDIT)
{
if(lparam==m_spin_edit1.Id()){Print(m_spin_edit1.GetValue());}
if(lparam==m_spin_edit2.Id()){Print(m_spin_edit2.GetValue());}
if(lparam==m_spin_edit3.Id()){Print(m_spin_edit3.GetValue());}
if(lparam==m_spin_edit4.Id()){Print(m_spin_edit4.GetValue());}
if(lparam==m_spin_edit5.Id()){Print(m_spin_edit5.GetValue());}
if(lparam==m_spin_edit6.Id()){Print(m_spin_edit6.GetValue());}
if(lparam==m_spin_edit7.Id()){Print(m_spin_edit7.GetValue());}
if(lparam==m_spin_edit8.Id()){Print(m_spin_edit8.GetValue());}
if(lparam==m_spin_edit9.Id()){Print(m_spin_edit9.GetValue());}
...
}
私はそのようなコードを書かないつもりだった。
if(id==CHARTEVENT_CUSTOM+ON_END_EDIT)
{
Print(GetValue(lparam));
или
Print(this.GetValue());
}
しかし、私はフィールドの数が多くないので、最初のオプションで十分です。
Pavel Kolchin:
...
私はそのようなコードを書かないつもりだった。
if(id==CHARTEVENT_CUSTOM+ON_END_EDIT)
{
Print(GetValue(lparam));
или
Print(this.GetValue());
}
//| チャートイベント機能|
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
program.ChartEvent(id,lparam,dparam,sparam);
if(lparam==program.m_checkbox.Id())
if(program.m_checkbox.CheckButtonState())
{
program.m_checkbox.LabelColor(clrGreen);
}
else
{
program.m_checkbox.LabelColor(clrRed);
}
}
//+------------------------------------------------------------------+
Alexander Fedosov:
簡単な作業です。チェックボックスをクリックしたときのラベルの色を変える。チェックあり-緑文字、チェックなし-赤文字。うまくいかない。チェックを外すと青になり、チェックを入れても青のままです。アイテムがインストールされる前にのみ、異なる状態に色を設定できるようになりました(下の例):
//| チェックボックス1を作成する|
//+------------------------------------------------------------------+
bool CProgram::CreateCheckBox1(const int x_gap,const int y_gap,string text)
{
//--- ウィンドウ・ポインタを保存する
m_checkbox1.WindowPointer(m_window1);
//--- 作成前にプロパティを設定する
m_checkbox1.XSize(90);
m_checkbox1.YSize(18);
m_checkbox1.LabelColor(clrGreen);
m_checkbox1.LabelColorOff(clrRed);
m_checkbox1.LabelColorHover(clrCornflowerBlue);
m_checkbox1.LabelColorLocked(clrSilver);
//--- コントロールの作成
if(!m_checkbox1.CreateCheckBox(m_chart_id,m_subwin,text,x_gap,y_gap))
return(false);
//--- オブジェクト・グループの共通配列にオブジェクトを追加する。
CWndContainer::AddToElementsArray(0,m_checkbox1);
return(true);
}
//| チャートイベント機能|
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
program.ChartEvent(id,lparam,dparam,sparam);
if(lparam==program.m_checkbox.Id())
if(program.m_checkbox.CheckButtonState())
{
program.m_checkbox.LabelColor(clrGreen);
}
else
{
program.m_checkbox.LabelColor(clrRed);
}
}
//+------------------------------------------------------------------+
どうでしょう?
{
if(program.m_checkbox.CheckButtonState()) program.m_checkbox.LabelColor(clrGreen);
else program.m_checkbox.LabelColor(clrRed);
}