Diskussion zum Artikel "DoEasy. Steuerung (Teil 17): Beschneiden unsichtbarer Objektteile, Hilfspfeiltasten WinForms-Objekte"
- www.mql5.com
Ich musste eine Schnittstelle erstellen, aber es gab keine einzige Bibliothek mit gut ausgearbeiteten Ereignissen, korrektem Fenstermanagement in Bezug auf ihre gegenseitige Lage, Überschneidungen und Bereichsgrenzen. Wenn irgendwo die oben genannten Dinge in unterschiedlichem Ausmaß vorhanden waren, gab es Probleme mit dem Erstellen, Löschen von Fenstern und dem Ändern von Eigenschaften zu einem beliebigen Zeitpunkt.
Das alles sollte das Rückgrat von GUIs sein. Warum sie sofort mit dem "Zeichnen" beginnen, ist nicht klar.
Ich habe einige kleine Änderungen am Quellcode des aktuellen Artikels im Expert Advisor vorgenommen:
//--- Создадим объект 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); ... }
Ich habe ein wenig mit den Panels gespielt, das Ergebnis ist wie folgt:
Das Umschalten des Fensters in den Vordergrund erfolgt, wenn die Maus angeklickt wird, obwohl es sein sollte, wenn Sie klicken.
Empfang von Ereignissen erfolgt durch den Indikator, wahrscheinlich für den Tester gemacht wurde, ohne sie Ereignisse nicht funktionieren, in der Tester auch, auch beim Laden des Indikators durch die Vorlage....
Ich musste eine Schnittstelle erstellen, aber es gab keine einzige Bibliothek mit gut ausgearbeiteten Ereignissen, korrektem Fenstermanagement in Bezug auf ihre gegenseitige Lage, Überschneidungen und Umfangseinschränkungen. Wenn es irgendwo die oben genannten Dinge mit unterschiedlichem Ausarbeitungsgrad gab, gab es Probleme mit dem Erstellen, Löschen von Fenstern und dem Ändern von Eigenschaften zu einem beliebigen Zeitpunkt.
Das alles sollte das Rückgrat von GUIs sein. Warum sie gleich mit dem "Zeichnen" anfangen, ist nicht klar.
Ich habe einige kleinere Änderungen am Quellcode des aktuellen Artikels im Expert Advisor vorgenommen:
Ich habe ein wenig mit den Panels gespielt, das Ergebnis ist wie folgt:
Das Fenster wird in den Vordergrund geschaltet, wenn die Maus gedrückt wird, obwohl sie gedrückt sein sollte.
Das Empfangen von Ereignissen erfolgt über den Indikator, wahrscheinlich für den Tester, ohne ihn funktionieren die Ereignisse nicht, auch im Tester, selbst beim Laden des Indikators über die Vorlage....
Wofür sind die Ereignisse aus anderen Charts?
Ich habe auf meine visuelle Anwendung geklickt, Ihr Expert Advisor läuft parallel, und dies wird in den Protokollen vermerkt:
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
Ich verstehe nicht, was das soll.
Es ist sehr langsam zu zählen. Was passiert mit der Tabelle mit einer großen Anzahl von Zellen?
Messung der Geschwindigkeit beim Aktualisieren von grafischen Objekten:
//--- Behandlung von Ereignissen einer Sammlung von grafischen Elementen ulong mcs=GetMicrosecondCount(); engine.GetGraphicObjCollection().OnChartEvent(id,lparam,dparam,sparam); Print((GetMicrosecondCount()-mcs)/1000.0);
Linker Mausklick auf die Mitte des Panels: 5ms
Klick auf die Kopfzeile einer aktiven Registerkarte: 7 ms.
Klick auf die Kopfzeile einer inaktiven Registerkarte: 20 ms
Wozu dienen die Ereignisse auf den anderen Karten?
Ich habe meine visuelle Anwendung angeklickt, Ihr Expert Advisor läuft parallel, die Logs zeigen dies:
Ich verstehe nicht, was das soll.
Es ist sehr langsam zu zählen. Was passiert mit der Tabelle mit einer großen Anzahl von Zellen?
Messung der Geschwindigkeit der Aktualisierung von Grafikobjekten:
Klick mit der linken Maustaste auf die Mitte des Panels: 5 ms
Klick auf den Titel der aktiven Registerkarte: 7 ms
Klick auf den Titel einer inaktiven Registerkarte: 20 ms
Die Bibliothek scannt die gesamte Umgebung und gibt Meldungen über protokollierte Ereignisse aus. Im Moment sind dies nur Debugging-Meldungen - die Bibliothek befindet sich in der Entwicklung. Wenn sie voll funktionsfähig ist, wird es eine Auswahl geben, was benötigt wird und was nicht.
Vielen Dank, Anatoly, für dein Feedback. Natürlich wird alles finalisiert werden.
Die Mindestanforderungen sind mit EasyAndFastGUI abgedeckt. Vielleicht sollte man die neueste Version gegen eine kleine Gebühr auf dem Marktplatz veröffentlichen, denn für kostenlosen Support ist nicht viel Zeit.
So wie es ist, kann dieses Thema endlos weiterentwickelt werden. Es gibt so viele verschiedene Möglichkeiten, wohin das alles führen könnte, dass es fantastisch ist. )
Wir werden auf dieses Thema noch einmal zurückkommen. Im Moment sind wir sehr beschäftigt. Macht weiter so, es ist sehr spannend! 👍
Mein Mindestbedarf ist mit EasyAndFastGUI gedeckt. Wahrscheinlich werde ich die neueste Version gegen eine kleine Gebühr auf dem Marktplatz veröffentlichen, da ich nicht viel Zeit für kostenlosen Support habe.
So wie es ist, kann dieses Thema endlos weiterentwickelt werden. Es gibt so viele verschiedene Möglichkeiten, wohin das alles führen könnte, dass es fantastisch ist. )
Wir werden auf diese Frage noch einmal zurückkommen. Im Moment sind wir sehr beschäftigt. Macht weiter so, es ist sehr spannend! 👍
Dobro 👌.
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.


Neuer Artikel DoEasy. Steuerung (Teil 17): Beschneiden unsichtbarer Objektteile, Hilfspfeiltasten WinForms-Objekte :
In diesem Artikel werde ich die Funktionalität zum Ausblenden von Objektabschnitten, die sich außerhalb ihrer Container befinden, erstellen. Außerdem werde ich zusätzliche Pfeiltastenobjekte erstellen, die als Teil anderer WinForms-Objekte verwendet werden können.
Kompilieren Sie den EA und starten Sie ihn auf einem Chart:
Das Beschneiden von Bereichen, die über den Sichtbarkeitsbereich hinausgehen, funktioniert korrekt, Kopfzeilen, die über den Container hinausgehen, werden entlang seines Randes beschnitten, und wenn wir die Koordinaten des TabControls so einstellen, dass das Element links über den Container hinausgeht, wird auch hier alles korrekt beschnitten — das Element selbst wird entlang der Ränder des Panels beschnitten, und Schaltflächen, die sich auf dem Steuerelement befinden, werden ebenfalls durch den Rand des Sichtbarkeitsbereichs des Panels und nicht durch ihre Container beschnitten. Hier funktioniert alles korrekt. Horizontale Links-Rechts-Schaltflächen haben eine geringere Breite als die Standardbreite (9 Pixel). Trotzdem werden sie korrekt angezeigt.
Was muss repariert werden? Das Schattenobjekt erscheint vor dem Feld, das es wirft. Wir werden uns später damit befassen.
Autor: Artyom Trishkin