Diskussion zum Artikel "DoEasy. Steuerung (Teil 17): Beschneiden unsichtbarer Objektteile, Hilfspfeiltasten WinForms-Objekte"

 

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

 
Es ist seltsam, eine so schwache Reaktion der Gemeinschaft zu sehen. Braucht denn niemand mehr grafische Schnittstellen? Früher gab es heftige Diskussionen über dieses Thema. Offenbar haben sich die Reihen stark gelichtet. Das ist schade.

Erst jetzt habe ich Zeit gefunden, den Code dieser Serie genauer zu lesen und war angenehm überrascht. Endlich, nach so vielen Jahren, ist jemand gereift und hat sich entschlossen, eine neue Evolutionsrunde in der Entwicklung von grafischen Schnittstellen in MQL zu starten und dabei die Unzulänglichkeiten aller früheren Iterationen anderer Autoren zu berücksichtigen.

Erst vor kurzem, nach einer langen Pause in der MQL-Entwicklung, habe ich mit der Arbeit an einer neuen Version der EasyAndFastGUI-Bibliothek begonnen, aber jetzt sehe ich, dass sie bald für die Gemeinschaft der MQL-Entwickler irrelevant werden wird, da diese Version bereits eine Basis hat, die die Implementierung einer viel interessanteren Lösung ermöglicht.

Ich hoffe, dass das Projekt fertiggestellt wird und vielleicht sogar den grafischen Teil der Standardbibliothek ersetzen wird. Ich werde es gerne in meinen Projekten einsetzen, wenn das für mich notwendige Minimum, das in EasyAndFastGUI implementiert ist und vieles mehr, realisiert wird.

Natürlich gibt es noch viel zu tun, aber ich bin mir sicher, dass der Autor das schaffen wird.

Viel Erfolg!
EasyAndFastGUI - библиотека для создания графических интерфейсов
EasyAndFastGUI - библиотека для создания графических интерфейсов
  • www.mql5.com
Библиотека EasyAndFastGUI дает возможность создавать графические интерфейсы для своих MQL-программ.
 
Anatoli Kazharski #:
Es ist seltsam, eine so schwache Reaktion der Gemeinschaft zu sehen. Braucht denn niemand mehr grafische Schnittstellen? Früher gab es heftige Diskussionen über dieses Thema. Offenbar haben sich die Reihen stark gelichtet. Das ist schade.

Erst jetzt habe ich Zeit gefunden, den Code dieser Serie genauer zu lesen und war angenehm überrascht. Endlich, nach so vielen Jahren, ist jemand gereift und hat beschlossen, eine neue Runde der Evolution in der Entwicklung von grafischen Schnittstellen in MQL zu starten, unter Berücksichtigung der Unzulänglichkeiten aller früheren Iterationen von anderen Autoren.

Erst kürzlich, nach einer langen Pause in der MQL-Entwicklung, habe ich mit der Arbeit an einer neuen Version der EasyAndFastGUI-Bibliothek begonnen, aber jetzt sehe ich, dass sie für die Gemeinschaft der MQL-Entwickler bald irrelevant werden wird, da diese Version bereits eine Basis enthält, die es erlauben wird, eine viel interessantere Lösung zu implementieren.

Ich hoffe, dass das Projekt fertiggestellt wird und vielleicht sogar den grafischen Teil der Standardbibliothek ersetzt. Ich werde es gerne in meinen Projekten verwenden, wenn das für mich notwendige Minimum, das in EasyAndFastGUI implementiert ist und vieles mehr, realisiert wird.

Es gibt noch viel zu tun, aber ich bin sicher, der Autor wird es schaffen.

Erfolg!

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....

 
Anatoli Kazharski #:
Es ist seltsam, eine so schwache Reaktion der Gemeinschaft zu sehen. Braucht denn niemand mehr grafische Schnittstellen? Früher gab es heftige Diskussionen zu diesem Thema. Offenbar haben sich die Reihen stark gelichtet. Das ist schade.

Erst jetzt habe ich Zeit gefunden, den Code dieser Serie genauer zu lesen und war angenehm überrascht. Endlich, nach so vielen Jahren, ist jemand gereift und hat beschlossen, eine neue Runde der Evolution in der Entwicklung von grafischen Schnittstellen in MQL zu starten, unter Berücksichtigung der Unzulänglichkeiten aller früheren Iterationen von anderen Autoren.

Erst kürzlich, nach einer langen Pause in der MQL-Entwicklung, habe ich mit der Arbeit an einer neuen Version der EasyAndFastGUI-Bibliothek begonnen, aber jetzt sehe ich, dass sie für die Gemeinschaft der MQL-Entwickler bald irrelevant werden wird, da diese Version bereits eine Basis enthält, die es erlauben wird, eine viel interessantere Lösung zu implementieren.

Ich hoffe, dass das Projekt fertiggestellt wird und vielleicht sogar den grafischen Teil der Standardbibliothek ersetzt. Ich werde es gerne in meinen Projekten verwenden, wenn das für mich notwendige Minimum, das in EasyAndFastGUI implementiert ist und vieles mehr, realisiert wird.

Es gibt noch viel zu tun, aber ich bin sicher, der Autor wird es schaffen.

Erfolg!
Vielen Dank, Anatoly, für dein Feedback. Natürlich wird alles noch fertiggestellt werden.
Ich würde gerne wissen, was Sie hier gerne sehen würden, welche Funktionalität?
Feedback ist sehr wichtig.
 
Aliaksandr Hryshyn #:

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....

Das Abhören von Ereignissen aus einem anderen Chart wird durch den Indikator-Spion implementiert.
Wenn Sie einen anderen, besseren Weg kennen, schlagen Sie ihn bitte vor, wir werden ihn in Betracht ziehen.
Die Ereignisse funktionieren im Tester so nicht, wie sie sind.
Danke für den Hinweis auf den Fehler - wir werden ihn beheben, er befindet sich noch in der Entwicklungsphase. Genau das Rückgrat, von dem Sie sprechen.
 

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


 
Aliaksandr Hryshyn #:

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.

 
Artyom Trishkin #:
Vielen Dank, Anatoly, für dein Feedback. Natürlich wird alles finalisiert werden.
Ich würde gerne wissen, was Sie hier gerne sehen würden, welche Funktionen?
Feedback ist sehr wichtig.

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! 👍

 
Anatoli Kazharski #:

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 👌.