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

 
Nikolai Semko #:

ありがとう。
もちろん、開発者にとっては便利ではない。それでも、関数へのポインタを持つバリアントの方がずっといい。

なぜ不便なのか?使ってみてから結論を出してください))

1.コンストラクタはそれ自体ですべてのエレメント・ハンドラを表示する。

2.インテリセンスが必要な関数を提供してくれる。)

3.すべてのルールはシンプルで、覚えるのは難しくない。

ビジュアル・エディターだけはもっと簡単ですが、それは後の祭りです。

追伸:4年ぶりにあなたのタスクを10分で完了しました。残りの時間は、なぜあなたの関数が機能しないのかを理解しようとしていて、それからGIFを撮影していました。)))
 
Реter Konow #:
なぜ不快なのか?やってみてから結論を出してください))

1.すべてのエレメント・ハンドラはコンストラクター自身が出力する。

2.インテリセンスは必要な関数を提供します。)

3.すべてのルールはシンプルで覚えやすい。


ビジュアルエディターだけはもっと簡単だが、それは後の話だ。

追伸:4年ぶりに、あなたのタスクを10分で完了しました。残りの時間は、なぜあなたの関数が機能しないのかを考え、そしてgifを撮影していました。)))

開発者が書かなければならないInternal_API.mqhファイルはかなり大きく、複雑 ですね。



このようなボタン1つのタスクで、何行のコードがあるのでしょうか? 開発者にとって、GUIを通常の方法で開発することは重要です。 例えば、次のようなタスクがあります:

#resource "//Images//eclipse-alt.png" as uchar eclipse_alt[] // загружаем в ресурс изображение иконки с файла png
#include  <My\IconsMenu.mqh>

//+------------------------------------------------------------------+
IconsMenu menu(5,15,1,ANCHOR_RIGHT_UPPER,true,27, CheckBox, 0x00EEEEEE); // создаем меню
//+------------------------------------------------------------------+
void TimerMenu() { // таймер необходим для всплывающей подсказки
   menu.Timer();
}
//+------------------------------------------------------------------+
int OnInit() {
   InitMenu();
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason) {
}
//+------------------------------------------------------------------+
void OnTick() {
}
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam) {
   menu.ChartEvent(id,lparam,dparam,sparam);
}
//+------------------------------------------------------------------+
void InitMenu() {
   menu.SetTimerFunction(TimerMenu); // установка функции таймера
   bool dark_mode = W.Color!=0;      // определяем текущую цветовую схему чарта
   menu.AddPng(eclipse_alt,"dark/light theme",ChangeColorScheme,dark_mode); // создаем элемент кнопки-иконки
   menu.Draw();
}
//+------------------------------------------------------------------+
void ChangeColorScheme (bool checked) {
   struct ColorScheme {
      uint           background;
      uint           foreground;
      uint           grid;
      uint           bar;
      uint           bull;
      uint           bear;
      uint           volume;
   };
   static const ColorScheme c[2] = {{0x00000000,0x00DDAAAA,0x00804040,0x0000FF00,0x00000000,0x00FFFFFF,0x0032CD32},
      {0x00FFFFFF,0x00000000,0x00C0C0C0,0x00000000,0x00FFFFFF,0x00000000,0x00008000}
   };
   int clr_scheme = checked?1:0;

   if (checked) {
      menu.clr_off = 0x00606060;
      menu.clr_hover = 0x30808080;
   } else {
      menu.clr_off = 0x00EEEEEE;
      menu.clr_hover = 0x30FFFFFF;
   }
   menu.ChangeColorAll();
   menu.Draw();

   ChartSetInteger(0,CHART_COLOR_BACKGROUND,c[clr_scheme].background);
   ChartSetInteger(0,CHART_COLOR_FOREGROUND,c[clr_scheme].foreground);
   ChartSetInteger(0,CHART_COLOR_CHART_LINE,c[clr_scheme].bar);
   ChartSetInteger(0,CHART_COLOR_CHART_DOWN,c[clr_scheme].bar);
   ChartSetInteger(0,CHART_COLOR_CHART_UP,c[clr_scheme].bar);
   ChartSetInteger(0,CHART_COLOR_CANDLE_BULL,c[clr_scheme].bull);
   ChartSetInteger(0,CHART_COLOR_CANDLE_BEAR,c[clr_scheme].bear);
   ChartSetInteger(0,CHART_COLOR_GRID,c[clr_scheme].grid);
   ChartSetInteger(0,CHART_COLOR_VOLUME,c[clr_scheme].volume);
   ChartRedraw();
}

GUIの作成とカスタマイズに関することはすべて黄色でハイライトされています。それぞれの新しいGUI要素は、1行のコードとこの要素からのイベント・ハンドラ関数です。



ファイル:
 
ニコライ もうすべて説明したよ。

1.ビルドされたGUIを保存するときに、ファイルは自動的に印刷されます。

2.誰も特別に書かない。

3.ファイルの中には、ユーザーがマークアップ言語で宣言したコントロールの ハンドラが用意されている。

4..ハンドラーはエンジンからインターフェース・イベントを受け取る。

5.ユーザーは自分のコードをハンドラーに挿入するだけ。

以上だ。繰り返しはしない。

 
Реter Konow コントロールの ハンドラが用意されている。

4..ハンドラーはエンジンからインターフェースのイベントを受け取ります。

5.ユーザーは自分のコードをハンドラーに挿入するだけです。

以上だ。繰り返しはしない。



すべてのファイルが揃ったバージョンを待つことにします。

 
何行のコードかという質問について。

あなたの問題を解決する際、インテリセンスから2行をハンドラーに挿入しました。写真のように。カッコの中に色の名前を書いただけです。そして2行の関数(あなたの代わりに)。他には何も書いていない。
 
リリース前にコードを "クリーンアップ "し、エンジンを "再構築 "し、不要なものを(もし見つかれば)取り除くと同時に、すべてがどのように機能したかを思い出している。

一般的には、すぐにアップするつもりだ。
 
Реter Konow # :
私はリリース前にコードを "クリーンアップ "し、エンジンを "再構築 "し、不必要なものを(見つけられれば)取り除くと同時に、すべてがどのように機能していたかを思い出している。

一般的には、すぐにアップするつもりだ。

あなたのリリースを楽しみにしています。

 
Nikolai Semko # :

ピーター、私はあなたを理解していない。あなたは質問に答えていない。
プログラマーにとって、作業中にGUIとどのようにやりとりするかが重要なんだ。
これが私のGUIの例だ。私は明暗テーマのショートカットをクリックし、このイベントはすぐに背景色と線を変更する機能をトリガーしました。このインタラクションはどのように行うのでしょうか?


ユーザーは私のコードと(まったく)対話 しません "
?プログラマーは、コードとではなく、コードを生成するイベントと対話する必要がある。

結局のところ、GUIは独立したプログラムではない。GUIは、最終的には開発者のメインプログラムと相互作用しなければなりません。それがインジケーターであれEAであれ。

あなたの写真にあるGUIは素晴らしいですが、どのように実現したのか教えてください。

 
hini #:

リリースを楽しみにしている。

わかりました(苦笑)。

リリースについて少し説明しておこう。4年ぶりにエンジンの最新バージョンが失われた。すぐには発見できなかった。古いバージョンは動いているが、ビルダーバージョンへのアップグレードが必要だ。そのためには、少し忘れていたコードを深く掘り下げる必要がある。とはいえ、大したことではないし、必ず完成する。

エンジンが遅れているので、リリースは2つのパートに分けることにした。まず、コンストラクターを紹介する。希望者はマークアップ言語に慣れ、必要なGUIを書く。しばらくしたら、アップデートしたエンジンを公開する。その後、作成したGUIをカスタム・エキスパート・アドバイザーやインジケーターと連携させるお手伝いをします。そうすれば、誰もがマークアップ言語での作業の簡単な原則と、自分のアプリケーションにインターフェイスを接続する方法を学ぶことができます。

コンストラクタはほぼリリース可能で、エンジンは少し修正が必要なので、2部構成のリリースの方が簡単です。

まあ、もちろん、コンストラクタのリリースと一緒に、マークアップ・コードの例と書き方の補足説明も提供するつもりだ。

週末をお楽しみに)。
 
デザイナーのリリース後、MEから直接オンザフライでGUIをデザインしたい方は、以下のことを行ってください。

1.これを行うには、リリースビルドから "KIB-source.mqh "インクルードファイルを開く。

2.indicatorsフォルダに保存し、コンパイルする。

3.その結果、MT5 のナビゲータ・ブランチに「KIB-source.ex5」という新しいインジケータが表示され、フリー・チャート上に表示されます。

4.ユーザは、MQL5 ナビゲータ内に、マークアップ・コードを含むファイルのためのフォルダを作成する。

例えば、MQL5include\My_GUI\Project_1....

このフォルダに、プロジェクトのインターフェイスのファイルを保存 する。この中に、マークアップ・コードのUIを書いたり、編集したり、実験したり、デザインしたりする。

5.5. UI を構築する際、マークアップ言語を使って作業している間、結果は MT5 チャート上に表示され、インジケータ "KIB-source.ex5 "と、最初のリリースで提供する Expert Advisor(コンストラクタ)"KIB.ex5 "が表示されることを明記することが重要です。これらは両方とも同じチャート上にある必要があります。

さらに(非常に重要なことですが)、ME で並列に開かれた "KIB-source.mq5 "ファイル(カスタム GUI プロジェクトのファイルとともに)のコンパイル中に、すべてのマークアップ・コードが同じチャート上のコンストラクタに送られ、GUI が完全に再構築されます。インターフェイスのウィンドウやエレメントの数にもよりますが、200msから1000msかかります。そして、ユーザーは変更された結果をすぐに見ることができます。マークアップコードを変更し、"KIB-source.mq5" をコンパイルすると、一瞬で MT5 チャート上に結果が表示されます。したがって、2 つのモニターで作業することが望ましい。一方では MT5 を開き、もう一方では ME を開きます。

6.マークアップ言語の利便性は、そのシンプルさと、ウィンドウやプロジェクト間で簡単にコピーできる要素やウィンドウのテンプレートを作成できる点にある。

7.デザイナーはアーカイブでオープンソースであることを付け加えておきます。そのため、ユーザーは以下の作業を行うことになります:

1.アーカイブを開く。
2.2.KIBフォルダをMQL5includeフォルダに配置します。
3.3.アーカイブからCONNECTION.mqhファイルをMQL5inludeフォルダに入れる(サブフォルダには入れないでください)。
4.KIB.ex5 Expert Advisor が MT5 ナビゲータに表示されるように、KIB.mq5 ファイルを MQL5Experts フォルダに入れ、ME で開き、コンパイルして保存します。
5.この Expert Advisor をインジケータ KIB-source.mq5 と同じチャートにアップロードします。
6.その後、ME の KIB.mq5 コンストラクタ ファイルを閉じます。もう必要ありません。


これですべての動作準備が整いました。