Erstellen einer Grafikbibliothek von Grund auf

 
Säbel
 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Crowdsourced GUI. Offene Beta-Tests.

Alexey Barbashin, 2020.03.07 21:25

"aber vielleicht ist es einfacher, alles in Objekten zu machen" - das ist mehr als logisch

"Ja, natürlich werden wir uns teilweise darauf verlassen." - dann werden wir sofort korrigiert:

class CCoordPBase

Наследуемся от CObject, то есть:

class CCoordPBase : public CObject

Хотя наверное можно и по другому:

class Control : public CObject

CObject ist die Basisklasse für alle Objekte in der Entwicklerbibliothek. Hergestellt in Analogie zu C++ und C#. Das Basisobjekt (Typ) in Sharp ist Object.

Koordinaten und Abmessungen sind Eigenschaften des Steuerelements, ebenso wie Rahmenfarbe, -farbe und -dicke, Radien von Rundungen, Symbolen und Text.

Wir müssen zunächst definieren, welche Art von Kontrolle elementar ist und dann die grundlegenden Eigenschaften beschreiben.

Natürlich können einige der zuvor definierten Eigenschaften in den Nachkommen nicht verwendet werden, das ist kein Problem, aber es ist besser, die grundlegende Eigenschaft zur vielseitigsten zu machen.

Hier ist ein Beispiel für eine einfache Universalsteuerung:

Enthält Hintergrund, Rahmen, Radius, Symbol, Text

Wenn Sie eine Beschriftung benötigen, geben Sie Hintergrund, Rahmen und Symbol nicht an; wenn Sie ein Panel benötigen, wird der Inhalt nicht angegeben; wenn Sie eine Bildschaltfläche benötigen, wird nur das Symbol angegeben; wenn Sie eine Schaltfläche mit einem Bild benötigen, werden Hintergrund, Rahmen und Bild angegeben.

Das heißt, diese Zusammensetzung ist für die meisten Kontrollen ziemlich universell.


Verstehe, die Frage nach dem Ändern des Stils beim Hovern mit Speichern der Koordinaten... obwohl es irgendwie schon klar ist

Gibt es eine Standard-Biliotec-Kontrolle?

 

Das Wesen vonCObject besteht darin, alle Objekte zu typisieren.

Wir brauchen zum Beispiel eine Listenbibliothek (Liste von Elementen, Kombinationsfeld, Checkliste usw.). Für jede Art von Elementen können wir einen anderen Array-Typ erstellen, wie es Anatoly getan hat, oder Sie können ein vorgefertigtes Werkzeug verwenden:CArrayObj

Das heißt, viele Teile des Codes müssen nicht erfunden werden, sie sind bereits vorhanden, man braucht sie nur zu verwenden.

 
Alexandr Andreev:

Ich verstehe, dass, die Frage ist über die Änderung der Stil auf schwebende unter Beibehaltung der Koordinaten ... obwohl es bereits klar zu sein scheint

Gibt es ein Standard-Bilio auf der Steuerung?

Die Standardbibliothek der Entwickler kann als Grundlage genommen werden, ich sehe darin nichts Peinliches, ihre Hierarchie.

Natürlich sollten wir von dort aus alles wegwerfen, was mit der direkten Konstruktion zusammenhängt, aber das System der Übertragung von Ereignissen lassen - es ist wirklich universell!

Mit dieser Technologie werden Ereignisse durch das typisierte System des Elementarobjekts weitergeleitet, unabhängig davon, zu welcher Klasse selbst das komplexeste Steuerelement gehört.

Das grundlegende Steuerelement wird in den zugrunde liegenden CControls gezeichnet, woraufhin das Ereignis OnPaint() erzeugt wird. Dies ermöglicht dem Benutzer, die untergeordneten Steuerelemente neu zu zeichnen bzw. neu zu zeichnen und generell das Steuerelement nach Belieben neu zu zeichnen.

 
Alexandr Andreev:

Komm schon!!!!!

und ich habe mir überlegt, eine einfache Interaktion zu schaffen

wo wir Positionierungen eingeben, z.B. links vom letzten Objekt im Falle von Zeilen oder Spalten

Wir werden also einen universellen Controller schreiben

Genau so sollte es gemacht werden: Schreiben Sie die elementare Interaktion.

Ein grundlegender Controller muss zu Beginn nicht alle notwendigen Eigenschaften haben, es reicht ein Hintergrund aus.

Denn um das Steuerelement selbst zu rendern, wird es die entsprechende Funktion enthalten. Wenn wir also Eigenschaften hinzufügen, müssen wir nur eine Funktion ändern.

Nach der Hierarchie der Elemente?

CObject ist ein Basistyp

class CControl : public CObject - die Basissteuerung der Bibliothek selbst

class CContainerControl : public CControl - die Gruppensteuerung. Eines der Felder wird ein Array von verschachtelten Steuerelementen sein. Ein Beispiel ist in derCWndContainer-Standardbibliothek zu finden.

 
Sasha, da Sie bereits mit der Programmierung begonnen haben, machen Sie ein Open-Source-Projekt in MQL. Wer weiß, vielleicht wird es welche geben.
 
Алексей Барбашин:
Sasha, da Sie bereits mit der Programmierung begonnen haben, machen Sie ein Open-Source-Projekt in MQL, dann können Sie es gemeinsam entwickeln und mit den anderen teilen. Wer weiß, vielleicht wird es welche geben.

Ich bin vorerst in der Warteschleife... Blick in die Standardbibliotheken.... es gibt eine Menge unnötiger Dinge

Ich weiß nicht, ob es viele von ihnen gibt, aber es wäre besser, eine eigene Kontrolle zu schreiben... oder erben

CChartObject

Документация по MQL5: Стандартная библиотека
Документация по MQL5: Стандартная библиотека
  • www.mql5.com
Стандартная библиотека MQL5 написана на языке MQL5 и предназначена для облегчения написания программ (индикаторов, скриптов, экспертов) конечным пользователям. Библиотека обеспечивает удобный доступ к большинству внутренних функций MQL5.
 
Алексей Барбашин:
Sasha, da Sie bereits mit der Programmierung begonnen haben, erstellen Sie ein Open-Source-Projekt in MQL. Wer weiß, vielleicht wird es welche geben.

Ich denke, es ist ein bisschen früh, um bei Null anzufangen, wir müssen erst etwas aufbauen.

 
Alexandr Andreev:

Ich bin vorerst in der Warteschleife... Blick in die Standardbibliotheken.... es gibt eine Menge unnötiger Dinge

(wenn auch nicht viel))), aber Sie sollten besser Ihre eigene Kontrolle schreiben... oder Sie können sie vererben

CChartObject

Nein, nein!!!

Schauen Sie genau hin!

Dieser Controller ist genau der richtige Weg ins Nirgendwo! Wir brauchen keine diskreten Diagrammobjekte! Wir müssen auf der Leinwand zeichnen - nur so können wir uns weiterentwickeln und unsere Möglichkeiten erweitern.

Und die Tatsache, dass man seinen eigenen Haupt-Controller bauen muss - das ist sicher.

Die Standardbibliothek teilt Eigenschaften und Zustände zwischen CWndObject und CWnd auf, während wir alles in einem Steuerelement vereinen müssen.

 
Алексей Барбашин:

Nein, nein!!!

Schauen Sie genau hin!

Dieser Controller ist der Weg ins Nirgendwo! Wir brauchen keine diskreten Diagrammobjekte! Wir müssen auf Leinwänden zeichnen - das ist das Einzige, was uns Entwicklung und breite Möglichkeiten bietet.

Und die Tatsache, dass man seinen eigenen Haupt-Controller bauen muss - das ist sicher.

Die Eigenschaften und Zustände in der Standardbibliothek sind zwischen CWndObject und CWnd aufgeteilt, und wir müssen alle in einem Steuerelement vereinen.

Ich habe eine Viertelstunde damit verbracht, ein Projekt zu erstellen, und es hat sich herausgestellt, dass es erstellt wurde, jetzt überlege ich, wie ich es veröffentlichen kann.

 
Alexandr Andreev:

Ich denke, es ist ein bisschen früh, um mit einem Neuanfang zu beginnen.

Ich bin sicher, dass es keine gute Idee ist, bei Null anzufangen.

Sehr clevere Leute haben viel Zeit und Wissen investiert, um die gleiche Standardbibliothek oder Anatolys Bibliothek zu erstellen.

Die Menschen haben Zeit und Wissen investiert, und es wäre dumm, es nicht zu nutzen.

Wir sollten einfach das aus unserer Sicht Beste von beiden nehmen und ein neues bauen.

Wir müssen aus den Fehlern der anderen lernen. Wir werden unsere eigenen machen.)