//--------------------------//FIRST GROUP//--------------------------
GROUP, "Group 1",
__, CHECKBOX, "Checkbox 100",
END_GROUP,
//--------------------------
i, AT, _X2X, "MF", 10, _Y2Y, "MF", 10,
//--------------------------
i, CHECKBOXES, W, 120, END,
//--------------------------//--------------------------------------------------------------//1. WRITE THE NAME OF THE CHECKBOX THAT WILL BLOCK THE OTHERS://2. WRITE KEYWORD "BLOCKS".//3. WRITE THE NAMES OF THE ELEMENTS (OR GROUPS) IT WILL BLOCK.//4. PUT "END" IN THE END.//5. OR, WRITE THE NAME OF THEIR GROUP.//--------------------------------------------------------------"Checkbox 100", BLOCKS, "Group 2", END,
//--------------------------------------------------------------//--------------------------//SECOND GROUP//--------------------------
GROUP, "Group 2",
__, H_SLIDER, "H_Slider 1", W, 120, S_EDIT, "Textbox 1", W, 120,
__, C_LIST, "Combobox 1", W, 120, D_LIST, "Combobox 2", W, 120,
__, BUTTON, "Button 1", W,120, D_BUTTON, "Dialog button 1", W, 120,
END_GROUP,
//--------------------------
i, AT, _X2X, "MF", 10, _Y2H, "Checkbox 100", 30,
//--------------------------
i, X_GAP, 30,
i, Y_GAP, 20,
//----------------------------//SET MAIN PROPERTIES (IF YOU DON'T, THEY WILL HAVE DEFAULT VALUES): //------------------------------------------------------
NEW_WINDOW,
//------------------------------------------------------/*SET WINDOW TYPE*/ W_TYPE, SETTINGS,
//------------------------------------------------------/*WRITE WINDOW'S NAME*/ W_NAME, "My first window",
//------------------------------------------------------/*POINT TO WINDOW'S ICON*/ W_ICON, "::Images\\16x16\\Smile.bmp",
//------------------------------------------------------//------------------------------------------------------/*SET WINDOW'S ADDITIONAL PROPERTIES*///----------------------------------------------------------------------------------/*WINDOW OPENS AT START*/ OPEN_ON_INIT, /*(OOI)*//*WINDOW IS ALWAYS ON TOP*/ ALWAYS_ON_TOP, /*(OOT)*//*MARGINS OF THE WINDOW*/ MARGINS, 40,40,/*Х, Y*///----------------------------------------------------------------------------------////----------------------------------------------------------------------------------//1. DECLARE A GROUP WITH AN ABSTRACT NAME A.//2. DECLARE A NEW ROW OF ELEMENTS IN THE GROUP WITH A SYMBOL __, //3. DECLARE A BUTTON AND WRITE IT'S NAME.//4. END GROUP WITH THE KEYWORDS END_GROUP,//------------------------------------------------------
GROUP, "Buttons group",
__, BUTTON, "Button 1", W, 120,_,H, 50, D_BUTTON, "D button 1", W, 120,_,H, 50,
__, I_BUTTON, "I Button", W, 120,_,H, 50, TB_BUTTON, "TB button 1", W, 120,_,H, 50,
END_GROUP,
//--------------------------
i, AT, _X2X, "MF", 10, _Y2Y, "MF", 30,
//--------------------------
i, X_GAP, 30,
i, Y_GAP, 20,
//----------------------------//SET MAIN PROPERTIES (IF YOU DON'T, THEY WILL HAVE DEFAULT VALUES): //----------------------------"Button 1", N_TEXT,"Neutral state",
"Button 1", A_TEXT,"Active state",
"Button 1", N_LABEL,"::Images\\16x16\\About.bmp",
"Button 1", A_LABEL,"::Images\\16x16\\3d bar chart.bmp",
"Button 1", FIC,
//----------------------------//----------------------------"I Button", N_TEXT,"Neutral",
"I Button", A_TEXT,"Active",
"I Button", N_LABEL,"::Images\\16x16\\Accounting.bmp",
"I Button", A_LABEL,"::Images\\16x16\\Address book.bmp",
"I Button", FIC,
//----------------------------//----------------------------"D button 1", N_TEXT,"Also Neutral",
"D button 1", A_TEXT,"Also Active",
"D button 1", N_LABEL,"::Images\\16x16\\Alarm clock.bmp",
//----------------------------//----------------------------"TB button 1", N_TEXT,"TB Neutral",
"TB button 1", A_TEXT,"TB Active",
"TB button 1", N_LABEL,"::Images\\16x16\\Alarm clock.bmp",
"TB button 1", A_LABEL,"::Images\\16x16\\Address book.bmp",
"TB Button 1", FIC,
//------------------------------------------------------//FINISH THE WINDOW BY KEYWORDS END_WINDOW,//------------------------------------------------------
END_WINDOW,
//----------------------------------------------------------------------------------
//+------------------------------------------------------------------+//| My first window.mqh |//+------------------------------------------------------------------+//DECLARE A NEW WINDOW//----------------------------------------------------------------------------------
NEW_WINDOW,
//------------------------------------------------------/*SET WINDOW TYPE*/ W_TYPE, SETTINGS,
//------------------------------------------------------/*WRITE WINDOW'S NAME*/ W_NAME, "Just a window",//------------------------------------------------------/*SET WINDOW'S ADDITIONAL PROPERTIES*///------------------------------------------------------ /*WINDOW IS ALWAYS ON TOP*/ALWAYS_ON_TOP,/*(OOT)*///------------------------------------------------------
END_WINDOW,
//----------------------------------------------------------------------------------//DECLARE A NEW WINDOW//----------------------------------------------------------------------------------
NEW_WINDOW,
//------------------------------------------------------/*SET WINDOW TYPE*/ W_TYPE, SETTINGS,
//------------------------------------------------------/*WRITE WINDOW'S NAME*/ W_NAME, "My first window",
//------------------------------------------------------/*POINT TO WINDOW'S ICON*/ W_ICON, "::Images\\16x16\\Smile.bmp",
//------------------------------------------------------//------------------------------------------------------/*SET WINDOW'S ADDITIONAL PROPERTIES*///----------------------------------------------------------------------------------/*WINDOW OPENS AT START*/ OPEN_ON_INIT, /*(OOI)*//*WINDOW IS ALWAYS ON TOP*/ ALWAYS_ON_TOP, /*(OOT)*//*MARGINS OF THE WINDOW*/ MARGINS, 40,40,/*Х, Y*///----------------------------------------------------------------------------------////----------------------------------------------------------------------------------//1. DECLARE A GROUP WITH AN ABSTRACT NAME A.//2. DECLARE A NEW ROW OF ELEMENTS IN THE GROUP WITH A SYMBOL __, //3. DECLARE A BUTTON AND WRITE IT'S NAME.//4. END GROUP WITH THE KEYWORDS END_GROUP,//------------------------------------------------------
GROUP, "Buttons group",
__, BUTTON, "Just a window", W, 150, //the button WILL call the window due to sharing the same name.
END_GROUP,
//--------------------------
i, AT, _X2X, "MF", 10, _Y2Y, "MF", 30,
//--------------------------
i, X_GAP, 30,
i, Y_GAP, 20,
//----------------------------//SET MAIN PROPERTIES (IF YOU DON'T, THEY WILL HAVE DEFAULT VALUES): //----------------------------"Just a window", N_TEXT, "Press to open",//redefine text on the button"Just a window", N_LABEL, "::Images\\16x16\\Alarm clock.bmp",
//------------------------------------------------------//FINISH THE WINDOW BY KEYWORDS END_WINDOW,//------------------------------------------------------
END_WINDOW,
//----------------------------------------------------------------------------------
そして2つ目の変形:
//+------------------------------------------------------------------+//| My first window.mqh |//+------------------------------------------------------------------+//DECLARE A NEW WINDOW//----------------------------------------------------------------------------------
NEW_WINDOW,
//------------------------------------------------------/*SET WINDOW TYPE*/ W_TYPE, SETTINGS,
//------------------------------------------------------/*WRITE WINDOW'S NAME*/ W_NAME, "Just a window",//------------------------------------------------------/*SET WINDOW'S ADDITIONAL PROPERTIES*///------------------------------------------------------ /*WINDOW IS ALWAYS ON TOP*/ ALWAYS_ON_TOP, /*(OOT)*///------------------------------------------------------
END_WINDOW,
//----------------------------------------------------------------------------------//DECLARE A NEW WINDOW//----------------------------------------------------------------------------------
NEW_WINDOW,
//------------------------------------------------------/*SET WINDOW TYPE*/ W_TYPE, SETTINGS,
//------------------------------------------------------/*WRITE WINDOW'S NAME*/ W_NAME, "My first window",
//------------------------------------------------------/*POINT TO WINDOW'S ICON*/ W_ICON, "::Images\\16x16\\Smile.bmp",
//------------------------------------------------------//------------------------------------------------------/*SET WINDOW'S ADDITIONAL PROPERTIES*///----------------------------------------------------------------------------------/*WINDOW OPENS AT START*/ OPEN_ON_INIT, /*(OOI)*//*WINDOW IS ALWAYS ON TOP*/ ALWAYS_ON_TOP, /*(OOT)*//*MARGINS OF THE WINDOW*/ MARGINS, 40,40,/*Х, Y*///----------------------------------------------------------------------------------////----------------------------------------------------------------------------------//1. DECLARE A GROUP WITH AN ABSTRACT NAME A.//2. DECLARE A NEW ROW OF ELEMENTS IN THE GROUP WITH A SYMBOL __, //3. DECLARE A BUTTON AND WRITE IT'S NAME.//4. END GROUP WITH THE KEYWORDS END_GROUP,//------------------------------------------------------
GROUP, "Buttons group",
__, BUTTON, "Press to open", W, 150,
END_GROUP,
//--------------------------
i, AT, _X2X, "MF", 10, _Y2Y, "MF", 30,
//--------------------------
i, X_GAP, 30,
i, Y_GAP, 20,
//----------------------------//SET MAIN PROPERTIES (IF YOU DON'T, THEY WILL HAVE DEFAULT VALUES): //----------------------------"Press to open", OPENS_WINDOW,"Just a window",//opens the window by the keyword "Press to open", N_LABEL, "::Images\\16x16\\Alarm clock.bmp",
//------------------------------------------------------//FINISH THE WINDOW BY KEYWORDS END_WINDOW,//------------------------------------------------------
END_WINDOW,
//----------------------------------------------------------------------------------
Y2Hという式を解析してみよう:
Yから高さ。
座標系では、オブジェクトのY点から、オブジェクトの高さ(y_size)に等しい距離でそのボディに沿って移動すると、その最下点に至る。スナップされるオブジェクトのY座標は、スナップされるオブジェクトの高さに沿って下降し、その最下点に到達しなければなりません。つまり、アンカーオブジェクトの高さ距離をカバーしなければならないので、アンカーは_Y2Hと呼ばれる。
2.X座標がスナップできるのは水平面内だけで、垂直面ではないため、_X2Hは 存在せず、Hは高さを表します。X2Wスナップは存在し、これはX座標が指定されたオブジェクトのX + X_SIZE(幅)点にスナップされることを意味します。
スナップについては後で詳しく説明します。
昨日は列挙について話し始めたので、今日は列挙の仕上げをしよう。
バインディングについては、厳しいルールがあり、今それを試そうとしても意味がないことを付け加えておく。より完全な説明を待ってほしい。
バインディングには、要素のグループに対して個別に機能するものと、グループ内の個々の要素に対して機能するものがあります。また、要素内のオブジェクト(テキストやアイコンのような)の位置決めに適したバインディングもあります。
それについては後で説明します。
昨日は列挙について話し始めたので、今日は列挙の仕上げをしよう。
しかし、よく考えた結果、列挙のトピックの終了を延期することにした。このトピックの続きの内容を理解するには、読者がまだ持っていない言語ルールの基礎知識が必要だからだ。
とりあえず、コントロールとバインディングについて理解を深めよう。
これまで、ほとんどの場合、私たちは単純なBUTTON ボタンを扱ってきた。ボタンが何であるかは誰でも知っている。しかし、詳細を説明する価値はあります。先に扱った他の要素についても同様です。このようにしましょう:まず、主な特徴と機能を一通り説明し、一般的な用語ですべてに触れてから、より詳細な考察のために各要素を個別に掘り下げていきます。
ボタンは、押されると状態が変化するインタラクティブな要素です。グラフィカル・インターフェースでは、さまざまな目的で使用されます。大抵は何かをオンにしたりオフにしたりするためですが、ウィンドウを呼び出すために使われることもあります。単純なボタンの用途は多岐にわたります。非常に普遍的な要素です。
私たちは他にどのような要素を考えてきただろうか?例えば、チェックボックス。なぜチェックボックスが必要なのか?チェックボックスは、プログラムの設定でオプションを有効にしたり、無効にしたり、ブロックしたりするのに必要です。複数のオプションから選択する必要がある場合は、R_BUTTON(ラジオ ボタン) 要素が適しています。ただし、オプションの数が少ない場合に限ります。
また、選択肢の数がかなり多いが、多すぎない場合はどうでしょうか。その場合は、D_LIST ドロップダウンリスト またはC_LIST コンボリスト が使用されます。これら2つの要素の違いは、ユーザーが希望する選択肢を入力するテキスト入力フィールドの 有無です。D_LISTには そのようなフィールドがありますが、C_LISTには ありません。
また、プログラムに選択肢が多すぎる場合はどうすればよいでしょうか。ドロップダウンリストはサイズが小さいので、居心地が悪くなります。解決策は、大きなウィンドウで長いスクロール可能なシート です。デザイナーのフォント、サウンド、フレームの ウィンドウで例を見ることができます。
しかし、これらのリストは非常に長いのでスクロールバーが 必要です。そのため、特別なエレメントが用意されています。「Field of View"V_BOX です。2つのスクロールバーと独自のキャンバスを持つシンプルな要素です。ちなみに、スクロールは垂直方向と 水平方向の 両方が可能です。また、キャンバスのサイズは、配置されたコンテンツの計算から自動的に設定されます。
リスト・アイテムは「リスト・アイテム」の略でL_ITEMと 呼ばれる。これらは別々のグループに集められ、指定された視野のキャンバス上に描画されます。各アイテムはメニュー項目やオプションの名前で呼ばれ、1つのSWITCH_ALLキーワードで切り替えられます。また、L_ITEM 項目のリストをV_BOXの 概要フィールドに入力するには、キーワード"IN"を使用します。位置決めは簡単で、LEFT_TOP, 0,0, です。
次に、リストアップされた要素をより詳しく、同じ順序で見てみましょう。位置決め、状態、プロパティ、属性について説明します。
...そして、トレーダー・プログラムの文脈での応用の選択肢を考えていきます。
普通のボタン:BUTTON
4種類のコンストラクタ・ボタン
古典的なボタンのように、比較的時代遅れの外観とシンプルな機能を持っています。アイコンがあります。
//-------------------------------------------------------------------------------------------------------------------------------------
カーソルのホバー/移動にスムーズに反応する美しいインタラクティブボタンです。通常のボタンとして使用されますが、視認性が低く、中立の状態ではアウトライン化された境界線がありません。ほとんどの場合、テキストはなく、アイコンが付いています。形は正方形が多いです。
//-------------------------------------------------------------------------------------------------------------------------------------
主にメイン・ウィンドウのヘッダーのツールバーに使用される。多くの場合、テキストはありませんが、アイコンがあり、通常は正方形の形をしています。カーソルを合わせると、カーソルに張り付く。ウィンドウや関数を呼び出します。矢印があります。
//-------------------------------------------------------------------------------------------------------------------------------------
ユーザーと対話するために、ダイアログ・ボックスの下に置かれます。Ok"、"Yes"、"No"、"Cancel"、"Abort"、"Continue"、"Accept"、"Next"、"Previous"、"Skip"、"Confirm"、"Open"、"Close"、...といったテキストを表示する。といったジャンルの言葉があります。
すべてのボタンにアイコンとテキストを設定でき、異なるステートの色も設定できます。
同時に、ボタンは状態によってテキストとアイコンを変えることができます。ニュートラルではテキストやアイコンが1つ、アクティブでは1つが異なります。
例えば
すべてのボタンが押され、ニュートラル状態にある:
ダイアログボタンを除き、このボタンは押された後ウィンドウを閉じるので必要ありません。
対話ボタンのテキストはアイコンの上に重なっていますが、アイコンとテキストをボタンの中に配置することができるため、そのようにデザインされています。
このように、ボタンはクリックされるとテキストを変えることができる。また、テキストとボタン名は別のものである。中立状態のテキストはN_TEXTという単語で設定でき、ボタン名の代わりに別のユーザーテキストが表示される。
アイコンについても同様です。中立状態用とアクティブ状態用のアイコンを指定することができる。
コード
ボタンの主な機能のひとつは、ウィンドウを呼び出すことだろう。あるウィンドウでボタンを押すと、別のウィンドウが開く。
これはどのように行われるのか?
二つの方法がある:
注意すべき点は、ボタンやメニューの項目名をウィンドウの名前と一致させると、これらの項目をクリックしたときにこれらのウィンドウが 開くということです。
そして2つ目の変形:
結果