- www.mql5.com
インターフェイスを作る必要があったのだが、よく練られたイベント、相互の位置関係、オーバーラップ、スコープの制限などの点で正しいウィンドウ管理をしているライブラリはひとつもなかった。程度の差はあれ、上記のようなものがどこかにあったとしても、任意の時点でウィンドウを作成したり削除したりプロパティを変更したりすることには問題があった。
これはすべてGUIのバックボーンであるはずだ。なぜすぐに「描画」をやり始めるのかは不明である。
Expert Advisorの現在の記事のソースコードに少し変更を加えてみた:
//--- Создадим объект WinForms Panel for(int i1=0; i1<2; i1++) { CPanel *pnl=NULL; pnl=engine.CreateWFPanel("WFPanel"+string(i1),50,50,410,200,array_clr,200,true,true,false,-1,FRAME_STYLE_BEVEL,true,false); ... }
パネルを少し弄ってみたが、結果は以下のようになった:
ウィンドウをフォアグラウンドに切り替えるのは、マウスをクリックしたときであるべきですが、クリックされたときに発生します。
イベントの受信は、おそらくテスターのために作られたインジケータを介して発生し、それなしではイベントが動作しません、テスターでも、テンプレートを介してインジケータをロードするときでさえ....
インターフェイスを作る必要があったのだが、よく練られたイベント、相互の位置関係、オーバーラップ、スコープの制限など、正しいウィンドウ管理ができるライブラリはひとつもなかった。程度の差こそあれ、上記のようなものがどこかにあったとしても、任意の時点でウィンドウを作成したり削除したりプロパティを変更したりすることには問題があった。
これはすべてGUIのバックボーンであるはずだ。なぜ、すぐに「描画」をやり始めるのかは不明である。
Expert Advisorの今回の記事のソースコードを少し変更した:
パネルを少し弄った結果、以下のようになった:
マウスが押されると、ウィンドウがフォアグラウンドに切り替わる。
イベントの受信は、おそらくテスターのためにインジケーターを通して行われます。インジケーターなしでは、テスターでも、テンプレートを通してインジケーターをロードしても、イベントは動作しません。
他のチャートからのイベントは何のためですか?
私のビジュアルアプリケーションをクリックすると、Expert Advisorが並行して実行され、ログにその旨が記録されます:
2022.09.10 22:18:36.256 TestDoEasy117 (AUDUSD,M1) Графическая метка "1716653226_u_0": ID 10001, 2022.09.10 22:16:34 2022.09.10 22:18:36.256 TestDoEasy117 (AUDUSD,M1) OnChartEvent: Состояние кнопки: Отжата 2022.09.10 22:18:36.256 TestDoEasy117 (AUDUSD,M1) OnChartEvent: Изменено свойство графического объекта: 2022.09.10 22:18:36.256 TestDoEasy117 (AUDUSD,M1) Графическая метка "1716653226_u_0": ID 10001, 2022.09.10 22:16:34 2022.09.10 22:18:36.256 TestDoEasy117 (AUDUSD,M1) OnChartEvent: Имя BMP-файла: 2022.09.10 22:18:36.256 TestDoEasy117 (AUDUSD,M1) - Состояние "On" [0]: "\Experts\Greshnik\Strategy_viewer.ex5::1716653226_u_012896816886410156413404032" 2022.09.10 22:18:36.256 TestDoEasy117 (AUDUSD,M1) - Состояние "Off" [1]: Отсутствует 2022.09.10 22:18:38.291 TestDoEasy117 (AUDUSD,M1) CGStdGraphObj::PropertiesCheckChanged: Создан снимок истории изменений графического объекта #19: 2022.09.09 23:54:59.875 2022.09.10 22:18:38.291 TestDoEasy117 (AUDUSD,M1) OnChartEvent: Изменено свойство графического объекта: 2022.09.10 22:18:38.291 TestDoEasy117 (AUDUSD,M1) Графическая метка "1716653226_u_0": ID 10001, 2022.09.10 22:16:34 2022.09.10 22:18:38.291 TestDoEasy117 (AUDUSD,M1) OnChartEvent: Время создания: 2022.09.10 22:18:38 2022.09.10 22:18:38.291 TestDoEasy117 (AUDUSD,M1) OnChartEvent: Изменено свойство графического объекта: 2022.09.10 22:18:38.291 TestDoEasy117 (AUDUSD,M1) Графическая метка "1716653226_u_0": ID 10001, 2022.09.10 22:16:34 2022.09.10 22:18:38.291 TestDoEasy117 (AUDUSD,M1) OnChartEvent: Имя BMP-файла: 2022.09.10 22:18:38.291 TestDoEasy117 (AUDUSD,M1) - Состояние "On" [0]: "\Experts\Greshnik\Strategy_viewer.ex5::1716653226_u_012896816886410156413395097" 2022.09.10 22:18:38.291 TestDoEasy117 (AUDUSD,M1) - Состояние "Off" [1]: Отсутствует 2022.09.10 22:18:38.959 TestDoEasy117 (AUDUSD,M1) CGStdGraphObj::PropertiesCheckChanged: Создан снимок истории изменений графического объекта #20: 2022.09.09 23:54:59.875
この目的がわかりません。
カウントに非常に時間がかかります。セル数の多い表はどうなりますか?
グラフィカル・オブジェクトの更新速度の測定:
//--- グラフィック・アイテムのコレクションのイベントを処理する ulong mcs=GetMicrosecondCount(); engine.GetGraphicObjCollection().OnChartEvent(id,lparam,dparam,sparam); Print((GetMicrosecondCount()-mcs)/1000.0);
パネルの中央をマウスで左クリック: 5ms
アクティブなタブのヘッダーをクリック:7ミリ秒
非アクティブなタブのヘッダーをクリック: 20 ms
他のチャートは何のためにあるのですか?
ビジュアル・アプリケーションをクリックすると、Expert Advisorが並行して実行されていることがログに記録されています:
この目的がわかりません。
カウントに非常に時間がかかります。セル数の多い表はどうなるのでしょうか?
グラフィック・オブジェクトの更新速度の測定:
パネルの中央をマウスで左クリック: 5 ms
アクティブなタブのヘッダーをクリック: 7 ms
非アクティブなタブのヘッダーをクリック:20 ms
ライブラリーは環境全体をスキャンし、ログに記録されたイベントに関するメッセージを出力 します。現時点では、これらは単なるデバッグ・メッセージであり、ライブラリは開発中です。完全に機能するようになれば、何が必要で何が不要かを選択できるようになるでしょう。
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索


新しい記事「DoEasy-コントロール(第17部):オブジェクトの非表示部分の切り取り、補助矢印ボタンのWinFormsオブジェクト」はパブリッシュされました:
この記事では、コンテナの外側にあるオブジェクトセクションを非表示にする機能を作成します。また、他のWinFormsオブジェクトの一部として使用する補助矢印ボタンオブジェクトを作成します。
EAをコンパイルし、チャート上で起動します。
表示範囲を超える領域の切り取りは正しく機能し、コンテナを超えるヘッダーはその端に沿って切り取られます。要素が左側のコンテナを超えるようにTabControlの座標を設定すると、ここですべてが正しく切り取られます。要素自体がパネルの端に沿って切り取られ、コントロールに配置されたボタンも、コンテナではなく、パネルの可視性範囲の端によって切り取られます。ここではすべてが正しく機能します。横方向の左右ボタンの幅は、デフォルト(9ピクセル)よりも小さくなっています。それにもかかわらず、それらは正しく表示されます。
何を修正する必要があるのでしょうか。影オブジェクトは、それをキャストするパネルの前に表示されます。これについては後で扱います。
作者: Artyom Trishkin