MQLで書かれたUIのギャラリー - ページ 58

 
エンジンとビルダーの完全に機能する基本バージョンは、有効かつ達成可能な目標である。そのためには明確な計画と優先順位付けが必要である。ひいては、大きな仕事を計画に追加することをやめ、緊急の問題を解決することを意味する。

高層ビルの建設に例えてみよう。現場監督が、何階建てのビルを建てなければならないかを正確に把握していないプロジェクトを 想像してみよう。彼は何も知らされていなかったとしよう。しかし、彼は根っからのクリエイターである。彼は気にしない。大きければ大きいほどいい。高い家や高層ビルが好きなのだ。彼が仕事をしている間にも、工事は進み、階数は増え、建物は空に向かって大きくなっていく。しかし、足場が外されず、居住スペースが清掃されていないため、フラットは入居者に引き渡せない。ドアも取り付けられていない。家は未完成なのだ。しかし、現場監督にとっては些細なことだ。彼は上を見ている。空を。そして入居者たちは、フラットが必要だと焦って待っている。

一般的には、現場監督は「ファームウェアを変更」し、精神的に再編成する時期だ。床を作るのをやめ、開口部にドアを付け始める。そして最後に、清掃、壁の漆喰塗り、寄木細工の敷き詰め、シャンデリアの取り付けを始める......。

こう言っておこう:今のところ、床は作らない。その代わり、すでに出来上がっている床を仕上げる。できるだけ早く入居者に引き渡せるよう、工事は計画される。

結局のところ、この家は彼らのために建てられたのだから......。


 

皆さん、こんにちは、

最近の議論を踏まえて、ピーター・コナウのプロジェクトの 成果と進捗状況をフォーラムではなく「コードベース」に記録することを提案したいと思います。フォーラムは議論や即時のフィードバックには優れていますが、プロジェクトの全体像や一貫した方針を示すのに必要な構造や一貫性に欠けています。

Codebaseを使用することで、すべての関連情報が整理され、簡単にアクセスでき、プロジェクトの状況を明確に把握することができます。これは、明瞭さを保つだけでなく、チームメンバーや利害関係者全員のより良い協力と理解を促進する上でも役立ちます。

この提案をご検討いただければ幸いです。

 
Yutaka Okamoto プロジェクトの 結果と進捗状況を、フォーラムではなくCodebaseで文書化することを提案したいと思います。フォーラムは議論や即時のフィードバックには最適ですが、プロジェクトの全体像や一貫した方針を示すのに必要な構成や一貫性に欠けています。

Codebase」を使うことで、すべての関連情報が整理され、簡単にアクセスでき、プロジェクトの状況を明確に示すことができます。これは、明確性を維持するのに役立つだけでなく、すべてのチームメンバーや利害関係者間のより良い協力と理解を促進する。

この提案をご検討いただければ幸いです。

とても合理的な提案です、ありがとうございます。間違いなく、コードベースはアップデートの公開やユーザーとのコミュニケーションに便利です。プロジェクトの発展に大いに貢献しています。これまでコードベースはほとんど利用したことがありませんでしたが、規約を検討し、要件に適合させることに現実的な意味があることがわかりました。このプラットフォームの可能性と限界を知るために、私はコミュニティの有名なメンバーのプロジェクトを探すつもりだ。彼らの例を参考にしながら、私はコードベースのプロジェクトを有益で有能な方法で実施することができるだろう。

 

今日リリースを予定している。

しかし、フォーラムのメンバーの親切なアドバイスに従って、コードベースで新バージョンを公開することにした。それを正しく行うには、同じような出版物の例を研究し、フォーラムとそこでのプロジェクトを並行して実行する計画を立てるのに数日必要だ。また、モデレーションも必要だ。

今回のリリースについて少し:

1.ユーザープログラムとそのグラフィカル・インターフェースの 間のプログラム的インタラクションのシステムを構想し、実装した。

詳細はこちら:

  • 技術的なテストを行い、その結果を分析した結果、抽象的なグローバル・プロパティの代わりにエレメントのラッパー関数を 使うことにした。その結果、これはアルゴリズムとグラフィカル環境のプログラム・カップリングの最も効果的でシンプルなバリエーションであることが判明した。
  • UIDATA.mqh ファイルとAPI.mqhファイルのプロジェクト保存と印刷機能に追加を行い、プロジェクト保存時にインターフェイスの各インタラクティブ要素が自動的にラッパー関数を受け取るようにしました。
  • 同時に、エレメント・ラッパー関数は非常に小さなボディを持ち、その主なタスクは、エレメント番号プロパティ 値という3つの主なパラメータを渡して、セントラル関数を呼び出すことです。
  • 関数の外形がシンプルであることは、その応用の多様性を妨げる ものではありません:

1.1.空括弧で呼び出された場合、関数は要素パラメータの値を3つの型のうちの1つで返します: int、double、string 要素の型に応じて、int型、double型、string型のいずれかを返します。

     int i    = w6_i_CHECKBOX_Some_checkbox(); //Элемент чекбокс. Буква i  после префикса означает что тип возвращаемого/устанавливаемого значения int.
     
     double d = w6_d_S_EDIT_Spin_the_value();  //Элемент поле ввода с кнопками. Буква d после префикса означает что тип возвращаемого/устанавливаемого значения double.

     string s = w7_s_EDIT_Comment_1();         //Элемент текстовое поле ввода. Буква s означает что тип возвращаемого/устанавливаемого значения string.

2.括弧内に1つの値を指定して呼び出された場合、関数は渡された値を要素パラメータに設定した後、再描画します(値は要素のタイプに応じて、intdoublestringの いずれかに設定されます)。

     int i    = w6_i_CHECKBOX_Some_checkbox(0/1/2/3); //Элемент чекбокс. Передача нуля,единицы, двойки или тройки для смены между нейтральным, активированным, нетр.блокир. и актив. блокир. состояниями элемента. 
                                                      //Тот же метод работает для всех кнопок.
     
     double d = w6_d_S_EDIT_Spin_the_value(653.89);   //Элемент поле ввода с кнопками. Передача значения параметра в функцию для установки его в элемент.

     string s = w7_s_EDIT_Comment_1("Any text");      //Элемент текстовое поле ввода. Передача текста для установки в поле ввода.   


3. 第 1 パラメータのデフォルト値とプロパティ番号(利用可能なプロパティから)を指定して呼び出された場合、関数は要素のこのプロパティの値を返します(プロパティ番号はすべてint 型で、プロパティパラメータに 渡されます

      int i = w6_i_BUTTON_Start(get_i,_A_COLOR); //Элемент Кнопка. Возврат значения цвета из свойства _A_COLOR. Может быть указано другое значение или другое свойство из списка доступных свойств.
                                                                  //Однако, данных тип функции принимает значения только типа int, но может приводить их к другим родственным типам (uint, short, bool...).
                                                                  //Значение первого параметра get_i говорит функции что не нужно принимать значение первого параметра в расчет, а лишь вернуть значение свойства _A_COLOR.


4 . valueと プロパティ値を括弧で 囲んで 呼び出すと、関数は渡された値を要素の利用可能なプロパティに設定 します。プロパティ番号は property パラメータに プロパティ 値は value パラメータに 渡されます。

     int i = w6_i_BUTTON_Start(C'255,0,0',_A_COLOR); //Элемент Кнопка. Передача и установка польз. значения цвета в свойство _A_COLOR. Может быть указано другое значение или другое свойство из списка доступных свойств.
                                                                      //Однако, тип функции этого элемента принимает значения только типа int, но может приводить их к другим родственным типам (uint, short, bool...).


関数名の構造: w6_i_BUTTON_Start();

1.wは 全ての ラッパー関数の頭文字です。windowの 省略形である。

2.6(または他の数字) - 要素を含むウィンドウのシーケンス番号。

3. i (dまたはs) - 要素のパラメータの戻り値/設定値の型を意味します。

  • int:ボタン、チェックボックス、スライダー、ボタン付き/なしの入力フィールド、プログレスバー、チャートバー、ラジオボタン
  • double: スライダー、 入力フィールド(ボタンあり/なし)。
  • 文字列 テキスト入力フィールド、VALUE要素、テーブル・セル、ポップアップ・リスト


4.BUTTON- ラッパー機能が属する要素タイプの名前です。他の要素でも構いません。

5.Start - 特定の エレメントの名前です。


  • 全てのラッパー関数は、同一の名前構造を持っています。
  • 繰り返します: 全ての関数は自動的に出力さ れます

//----------------------------------------------------------------------------------------------------

インテリセンスシステムのスマートなアプリケーション:

ウィンドウやエレメントの必要な関数・ラッパーを素早く検索して見つけることができるように、特別な接頭辞システムを使用することにしました。以下はその例です:

すべてのウィンドウとエレメントのラッパー関数の先頭にはw が付いています。しかし、w:_ の後にダッシュを付けると、すべてのUIウィンドウ関数の名前のリストが表示されたインテリセンスウィンドウが 開きます 次に、リストの中から探している名前のウィンドウを見つけ、その番号(関数名に印刷されています)を見て、ダッシュを消し、この番号をwの後に置きます。ウィンドウに含まれる要素の関数名を含むインテリセンスのリストが一度に表示されます。これがその方法である:

これは、エレメントのラッパー関数のリストを素早くナビゲートする簡単な方法 です。表示する必要もありません。

//----------------------------------------------------------------------------------------------------------

//----------------------------------------------------------------------------------------------------------

また、APIファイルの変更と追加が行われました。エレメントやウィンドウに関するより多くの情報が利用できるようになりました:

 switch(Element)
   {
//=====================================================================================================================
//WINDOW:       Settings example 1 | #: 6 | PFX: w_6 | GET/SET: int w_6_Settings_example_1(int value = get_i, int Property = 0)
//---------------------------------------------------------------------------------------------------------------------
//ELEMENT:      BUTTON
//NAME:         Start
//PARAMETER:    int
//INIT STATE:   OFF
//LOCATION:     Location: Window's Main Frame
//---------------------------------------------------------------------------------------------------------------------
//GET/SET:   int w6_i_BUTTON_Start(int value = none, int Property = 0)      | PFX: w6
//=====================================================================================================================
  
case Settings_example_1___Start:
  
               //------------------------------------------------------------------------------------------------------
               //What to do when button pressed or released?
               //------------------------------------------------------------------------------------------------------
               switch((int)action)
               {
                case pressed:  Alert("BUTTON Start pressed!");   break;
  
                case released:  Alert("BUTTON Start released!");   break;
               }
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break;
  
//=====================================================================================================================
//WINDOW:       Settings example 1 | #: 6 | PFX: w_6 | GET/SET: int w_6_Settings_example_1(int value = get_i, int Property = 0)
//---------------------------------------------------------------------------------------------------------------------
//ELEMENT:      CHECKBOX
//NAME:         Set an option
//PARAMETER:    int
//INIT STATE:   OFF
//LOCATION:     Location: Window's Main Frame
//---------------------------------------------------------------------------------------------------------------------
//GET/SET:   int w6_i_CHECKBOX_Set_an_option(int value = none, int Property = 0)      | PFX: w6
//=====================================================================================================================
  
case Settings_example_1___Set_an_option:
  
               //------------------------------------------------------------------------------------------------------
               //What to do when checkbox checked or unchecked?
               //------------------------------------------------------------------------------------------------------
               switch((int)action)
               {
                case checked:  Alert("CHECKBOX Set_an_option pressed!");   break;
  
                case unchecked:  Alert("CHECKBOX Set_an_option released!");   break;
               }
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break;
  
//=====================================================================================================================
//WINDOW:       Settings example 1 | #: 6 | PFX: w_6 | GET/SET: int w_6_Settings_example_1(int value = get_i, int Property = 0)
//---------------------------------------------------------------------------------------------------------------------
//ELEMENT:      CHECKBOX
//NAME:         Set another option
//PARAMETER:    int
//INIT STATE:   OFF
//LOCATION:     Location: Window's Main Frame
//---------------------------------------------------------------------------------------------------------------------
//GET/SET:   int w6_i_CHECKBOX_Set_another_option(int value = none, int Property = 0)      | PFX: w6
//=====================================================================================================================
  
case Settings_example_1___Set_another_option:
  
               //------------------------------------------------------------------------------------------------------
               //What to do when checkbox checked or unchecked?
               //------------------------------------------------------------------------------------------------------
               switch((int)action)
               {
                case checked:  Alert("CHECKBOX Set_another_option pressed!");   break;
  
                case unchecked:  Alert("CHECKBOX Set_another_option released!");   break;
               }
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break;
  
//=====================================================================================================================
//WINDOW:       Settings example 1 | #: 6 | PFX: w_6 | GET/SET: int w_6_Settings_example_1(int value = get_i, int Property = 0)
//---------------------------------------------------------------------------------------------------------------------
//ELEMENT:      D_LIST
//NAME:         D_LIST 1
//PARAMETER:    string
//INIT OPTION:  L_ITEM  1
//LOCATION:     Location: Window's Main Frame
//---------------------------------------------------------------------------------------------------------------------
//GET/SET:   string w6_s_D_LIST_D_LIST_1(string value = get_s, int Property = 0)      | PFX: w6
//=====================================================================================================================
 
近いうちにこれらの機能を試してみたい。
 
hini #:
近いうちにこれらの機能を試してみたい。
明日の夜、新しいバージョンをcodobaseにアップロードする予定だ。
 
深夜のリリース。
 

GUIと プログラム的に相互作用するエンジンのバージョンを紹介する。

多くのことをやった。伝えるべきこと、見せるべきことがある。

公開テストが終わったら、コードベースにアップロードするつもりだ。

興味深いことが判明した...。

詳細はまた明日。

ファイル:
4uh38_06.08.24.zip  1712 kb
 

少し先になるが、ユーザーにとって非常に便利なソリューションを見つけた。このソリューションによって、ユーザーは要素やプロパティの名前を覚える必要がなくなり、簡単に見つけて操作できるようになります。同時に、各要素は、その要素と「関連する」要素でのみ利用可能な取得/設定プロパティのリストを持っています。要素の関数名に接頭辞が埋め込まれているため、ユーザーはその関数を呼び出し、その要素が持っていないプロパティを返したり設定しようとするミスを犯すことはありません。

ラッパー関数は、自分でも驚くほど多機能で使いやすいことがわかりました。括弧が空であればパラメータの値を返し、値が1であれば設定し、最初のパラメータが空でプロパティのインデックスが2番目のパラメータにあれば、リストからプロパティの値を返す。最初のパラメータに値があり、2番目のパラメータにプロパティのインデックスがある場合、プロパティに値を設定します。また、成功した場合は1、エラー(値またはプロパティが無効)の場合は-1として結果通知を返します。関数は要素そのものを再描画します。この処理を行う必要はありません。

ラッパー関数でできること

1.要素パラメーターの値を取得する。

2.要素パラメーターの値を設定する。

3.要素プロパティの値を、その要素タイプに属するプロパティの個別リストから取得する(関数名に書かれた接頭辞で呼び出される)。

4.同じリストから要素プロパティの値を設定する。

5.エレメントの状態を設定する:ニュートラル、アクティブ、(オン/オフ)、ブロックされたニュートラル、ブロックされたアクティブ。

6.要素の現在の状態を返す。


最初の場合、関数はパラメータの値を返します。

2番目のケースでは、成功またはエラーという結果を返します。エラーはログに出力されます。

3番目のケースでは、プロパティの値を返します。

4番目の場合 - 結果:プロパティ設定の成功またはエラー。

5番目は、1または-1を返します。

6番目は、要素の状態インデックスを返します(詳細は後述します)。


すべては、自動的に出力される1つのラッパー関数によって行われます。w_とタイプすると、インテリセンスのリストが開き、ウィンドウの名前が表示される。その中に探している要素がある。どのウィンドウにあるか、大まかに覚えておく必要がある。そして、悪魔を消してウィンドウの番号を入力し、アイテムのリストから必要なものを選択する。暗記は不要。

要素の特性も覚える必要はない。機能名を見て、個々のプロパティのリストを開くための接頭辞を見てください。それを入力して開き、プロパティを選択する。何も覚える必要はありません。タイピングも必要ありません。インテリセンスがすべてやってくれる。

Windowsにも独自のラッパーがある。開いたり閉じたりできる。残りの機能はまだ実装されていない。


APIファイルを大幅にアップグレードした。エレメントに関する有用な情報が大幅に増えた。すなわち、接頭辞、個々のプロパティ、エレメントのラッパー関数と そのウィンドウのプロトタイプ、エレメントの正確な位置(もしあれば、エレメントが属するテーブル、キャンバス、タブ)、パラメータのタイプ(int、double、string...)、パラメータのプロパティ(min.value、max.value、step、小数点以下の桁数)が表示されます。初期値または選択されたオプション(要素による)が表示されます。すべてが非常に読みやすく、理解しやすく設計されています。

新しい機能を部分的にテストしましたが、満足しています。すべてが意図したとおりに動いている。

明日、実際に使ってみようと思う。

 
ディレクトリがロシア語のままです・・・・・・KIB PROJECTSのようにディレクトリとファイル名を英語表記にできないでしょうか・・・・・・これは私からのささやかな要望です!