Ein Crowdsourced-Projekt auf Canvas durchführen - Seite 8

 
o_O:

GUT.

der CFrame ist klar.

---

Mir ist aufgefallen, dass Sie den Weg eingeschlagen haben, bei dem die Blöcke der Benutzeroberfläche jeweils durch eine eigene Bitmap dargestellt werden.

ein wichtiger Punkt für diejenigen, die dies lesen und sich bereits Gedanken darüber gemacht haben:
sollte nur mit einer Bitmap arbeiten, auf der alle Elemente der Benutzeroberfläche gerendert werden. Einschließlich der z-Reihenfolge.
In diesem Fall gibt es mehr Möglichkeiten für das Rendering. (Schatten, Farbverläufe usw.)
Und die Steuerung wird vereinfacht (wir werden nicht auf die Ebene der MT-Objekte gehen)

IMHO sollte jedes einzelne Anwendungsfenster (Dialog) seine eigene Bitmap und sein eigenes Objekt auf dem Chart haben (denken Sie nicht einmal an den Fall, dass mehrere EAs oder Indikatoren eine einzelne Bitmap-Ressource "vergewaltigen").
In diesem Fall kann der Schatten eines Fensters als Alphakanal-Bitmap implementiert werden, so dass die Berechnung dieses Schattens nicht mehr erforderlich ist.
Alle GUI-Elemente eines einzelnen Fensters werden auf seiner Bitmap gezeichnet, unter Berücksichtigung der Z-Reihenfolge und der Verschachtelung (ich weiß nicht, wie man die Verschachtelung von GUI-Objekten korrekt aufruft)

Überwachen Sie Mausereignisse durch CHARTEVENT_MOUSE_MOVE, ich habe es in meinen Projekten getan, keine Verzögerungen gefunden.
Die Verwendung anderer Ereignisse ohne Qualitätsverlust bei der Mauseingabe war nicht möglich.
 
Für meine MQL-Projekte möchte ich GUI-Bibliothek zu WPF analog zu bringen, wo Markup und Ereignisse in einer Textdatei (z. B. XML) beschrieben werden.

Jetzt muss ich nur noch die Ereignisse implementieren, die die GUI-Engine gemäß der Beschreibung in der Textdatei aufrufen soll.
 
Zorro:
IMHO sollte jedes einzelne Anwendungsfenster (Dialog) seine eigene Bitmap und sein eigenes Objekt auf dem Chart haben (denken Sie nicht einmal an den Fall, dass mehrere EAs oder Indikatoren eine Bitmap-Ressource "missbrauchen").
In diesem Fall kann der Schatten eines Fensters als Alphakanal-Bitmap implementiert werden, so dass die Berechnung dieses Schattens nicht mehr erforderlich ist.
Alle GUI-Elemente eines einzelnen Fensters werden unter Berücksichtigung der Z-Reihenfolge und der Verschachtelung auf der Bitmap gezeichnet (ich weiß nicht, wie man die Verschachtelung von GUI-Objekten nennt)

das ist richtig.

Ich würde hinzufügen, dass nicht nur "jeder Dialog", sondern speziell eine Bitmap pro Experte/Indikator. Mehr ist möglich, aber das liegt im Ermessen des Programmierers.

Ich denke, wenn Sie einen funktionierenden Dialog auf der Bitmap haben, dann ist das Hinzufügen von modalen Fenstern auf derselben Bitmap oder eines anderen Dialogs auf derselben Bitmap eine technische Angelegenheit und im Moment nicht wichtig.

Zunächst erstellen wir ein abstraktes Modell ohne konkrete Angaben, z. B. welche Fenster sich wo befinden, usw..

Dann können Sie alle verschiedenen Funktionen und Verhaltensweisen abdecken

 
o_O:

Grüße Codierer.

Es gibt eine interessante Aufgabe, etwas wirklich Nützliches zu tun, und ich denke, Crowdsourcing wäre eine gute Option.
Erstens werden die Ergebnisse bereits in der Anfangsphase für jedermann zugänglich sein. Zweitens werden wir mit MQL etwas Neues machen. Und vielleicht werden wir sogar die MT-Entwickler um neue Goodies bitten.

----

Hier ist also die erste und grundlegende Aufgabe.

1. Wir müssen eine Klasse von Schaltflächen erstellen (sagen wir GButton, mit dem Präfix G, um sie nicht mit den bereits vorhandenen zu verwechseln).
- Bisher ist die Schaltfläche einfach mit Text (keine zusätzlichen Bilder)
- die Schaltfläche wird auf einem bestimmten Bereich der Leinwand gezeichnet
- die Schaltfläche hat ein Klick-Ereignis.



---
Mit der Zeit werden wir die Codes im Bitbucket veröffentlichen.

Ich verfolge es mit Interesse und möchte mich ein wenig einmischen: imho würden Entwickler (wie ich) in eine überfüllte GUI investieren, wenn diese GUI nicht nur mittels Terminal gezeichnet werden kann. Ich werde es erklären - eine schöne GUI ist gut, sie ist ein Plus für den Verkauf... aber solange sie keine Ressourcen verschlingt. Es wäre ideal, eine GUI-Bibliothek zu haben, die das Back-End umschalten kann. Zum Beispiel, während ich nicht zu pingelig über Ressourcen - lassen Sie es von Terminal auf Leinwand (Demos/Markt) gezeichnet werden, aber sobald etwas ernst - zeichnen Sie es über schnelle Werkzeuge auf Bitmap. Es gibt alle möglichen Arten von Kairo (ganz zu schweigen von OpenGL), die das Zeichnen einfacher machen.

Ideal ist es, wenn eine grafische Benutzeroberfläche in einer separaten Anwendung entworfen und beispielsweise als XML importiert wird. Es ist keine gute Idee, die Position von Schaltflächen und Dialogformularen in einem EA zu beschreiben.
 
Beispiel, schematisch:

Layout:
<sample>
   <window
     name='Sample'
     caption='Sample'
     x=0
     y=0
     width=320
     height=240
     OnClose='CloseApp'>

     <button caption='Exit' x y width height OnClick='ButtonExitClick'/>    

   </window>

</sample>
Durchführung von Veranstaltungen:
class SampleCloseAction : public CloseAction
  {
public:
               SampleCloseAction() { SetActionName("CloseApp"); }
   virtual int Execute() { Print('Bye'); return(0); }
  };

class ButtonExitAction : public ButtonClickAction
  {
public:
               ButtonExitAction() { SetActionName("ButtonExitClick"); }
   virtual int Execute() { GUI::WindowClose('Sample'); return(0); }
  };

BaseAction *actions[];

actions[0]=new SampleCloseAction;
actions[1]=new ButtonExitAction;

GUI::WindowCreate('Sample',actions);
 
Maxim Kuznetsov:

Im Allgemeinen wäre es ideal, eine grafische Benutzeroberfläche zu haben, die in einer separaten Anwendung entworfen und zum Beispiel als XML importiert wird. Es ist keine gute Idee, das Layout von Schaltflächen und Dialogformularen im Expert Advisor zu schreiben.

dort )

kommen wir zu unserer ersten Aufgabe, die wir nach der Erstellung der Elemente durchführen werden.

 
Maxim Kuznetsov:
Im Allgemeinen wäre es ideal, eine grafische Benutzeroberfläche zu haben, die in einer separaten Anwendung entworfen und zum Beispiel als XML importiert wird. Es ist keine gute Idee, Schaltflächenlayouts und Dialogformulare in einem EA zu schreiben.
In diesem Fall sollten Sie zunächst einen schnellen und guten XML-Parser schreiben. Es ist eine gute Sache, die man zu Hause hat. Ich selbst verwende eine Version von CodeBase, die für einige Aufgaben zu langsam ist, insbesondere für neue Builds. Ich habe schon alle diese Pflaster und Krücken drin. Generell gilt: Schreibt einen guten Parser, Genossen! Machen Sie es für alle einfach.
 
Vasiliy Sokolov:
In diesem Fall sollten Sie damit beginnen, einen schnellen und guten XML-Parser zu schreiben. Es ist sehr praktisch, so etwas im Haus zu haben. Ich verwende selbst eine Version von CodeBase, aber sie ist bei bestimmten Aufgaben sehr langsam, insbesondere bei neuen Builds. Ich habe schon alle diese Pflaster und Krücken drin. Generell gilt: Schreibt einen guten Parser, Genossen! Machen Sie es für alle einfach.
Vielleicht wissen Sie, wie man einen voll funktionsfähigen und vollständig gezeichneten Schieberegler erstellt? Zumindest in allgemeiner Hinsicht... Ich möchte das allgemeine Konzept begreifen.
 
Реter Konow:
Vielleicht wissen Sie, wie man einen funktionierenden und vollständig gezeichneten Slider erstellt? Zumindest in allgemeiner Hinsicht... Ich würde gerne das allgemeine Konzept kennenlernen.
Leider kann ich das nicht. Es ist ein ziemlich kompliziertes Element, selbst wenn man es auf der Grundlage normaler Primitive erstellt.
 
Реter Konow:
Vielleicht wissen Sie, wie man einen voll funktionsfähigen und vollständig gezeichneten Schieberegler erstellt? Zumindest in allgemeiner Hinsicht... Ich würde gerne das allgemeine Konzept kennenlernen.

Schauen Sie sich die CCanvas-Klasse an. Alle Rendering-Primitive sind verfügbar.

Zweitens können Sie bmp für Ihre emfs laden und sie a la BitBlt auf die Leinwand mischen.

Grund der Beschwerde: