Diskussion zum Artikel "Erstellung eines Dashboards zur Anzeige von Daten in Indikatoren und EAs" - Seite 2
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Hallo.
So.
wird eine Zeigervariable auf ein zukünftiges neues, dynamisch erzeugtes Objekt der Klasse deklariert und sofort mit dem Wert NULL initialisiert.
Eine einfache Instanz einer Klasse wird wie folgt deklariert:
Aber in diesem Fall kann man eine Instanz nicht auf diese Weise deklarieren und erstellen - die Klasse hat keinen Konstruktor ohne formale Parameter.
Wenn Sie also eine Instanz auf diese Weise deklarieren, müssen Sie alle notwendigen Parameter des Klassenobjekts angeben, die an den Klassenkonstruktor übergeben werden müssen:
------------------------
Im Beispiel der Arbeit mit der Klasse wird zuerst ein leerer Zeiger auf das zukünftige Objekt im Indikator erstellt, und dann wird in OnInit() das Panel-Objekt erstellt, wobei der Zeiger auf das erstellte Objekt in die Zeigervariable geschrieben wird:
Dann wird in OnDeinit() das Objekt im Speicher durch diesen Zeiger gelöscht:
Würden Sie einfach ein neues Objekt mit dem new-Operator erstellen, ohne einen Zeiger auf das erstellte Objekt in eine Variable zu schreiben, könnten Sie es später nicht löschen, was zu einem Speicherleck führen würde.
Kurz gesagt, in dem Beispiel aus dem Artikel
Wäre die benötigte Instanz der Klasse (CDashboard Dashboard) sofort erstellt worden, wären keine Zeiger darauf nötig gewesen - man hätte auf die gleiche Weise mit dem Operator "point" darauf zugegriffen. Und es wäre auch nicht nötig, sie zu löschen, wenn die Arbeit beendet ist - das Terminal-Subsystem macht das von selbst. Aber es wäre die einzige Instanz der Klasse im Programm.
Mit der dynamischen Erstellung können Sie neue Objekte der gewünschten Klasse im Handumdrehen erstellen und per Zeiger auf sie verweisen. Deshalb wurde im Beispiel die dynamische Erstellung eines Klassenobjekts verwendet. Vereinfacht, ohne auf einige Punkte einzugehen.
Danke für die ausführliche Antwort! also für jedes Objekt ein eigener Konstruktor in einem anderen Fall Objekt mit angeforderten Argumenten aus der Klasse, in jeder Phase können Sie verschiedene Objekte erstellen!(Nus wird ein wenig klarer).
Eigentlich Interesse, ein Info-Panel zu erstellen, ist es eine Folge der DPI des Monitors, in meinem Fall 168. Comment(); ist sehr klein!
Es gibt TerminalInfoInteger(TERMINAL_SCREEN_DPI), die ich unter Berücksichtigung der Auflösung erstellen möchte ... und ich möchte der Einfachheit halber nach Farbgruppen erstellen.
Vielleicht haben Sie eine solche Lösung? Ihr Code ist gut, lesbar... Ich, auf der anderen Seite, lang, unverständlich, als Ergebnis habe ich alles mehrmals neu zu schreiben! Vielen Dank für Ihre Unterstützung!
Vielen Dank für eine umfassende Antwort! so für jedes Objekt hat seinen eigenen Konstruktor im anderen Fall Objekt mit angeforderten Argumente aus der Klasse, in jeder Phase können Sie verschiedene Objekte erstellen!(Nous wird ein wenig klarer).
Eigentlich Interesse, ein Info-Panel zu erstellen, ist es eine Folge der DPI-Monitor, in meinem Fall 168. Comment(); ist sehr klein!
Es gibt TerminalInfoInteger(TERMINAL_SCREEN_DPI), die ich unter Berücksichtigung der Auflösung erstellen möchte ... und ich möchte der Einfachheit halber nach Farbgruppen erstellen.
Vielleicht haben Sie eine solche Lösung? Ihr Code ist gut, lesbar... Ich, auf der anderen Seite, lang, unverständlich, als Ergebnis habe ich alles mehrmals neu zu schreiben! Vielen Dank für Ihre Unterstützung!
Die Lösung steht in den Beispielen in der Hilfe:
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien.
Galerie der in MQL geschriebenen UIs
Artyom Trishkin, 2024.05.31 10:33 AM
Hier(TERMINAL_SCREEN_DPI):
Beispiel für die Berechnung des Skalierungsfaktors:
Auf diese Weise wird eine grafische Ressource auf Monitoren mit unterschiedlichen Auflösungen die gleiche Größe haben. Gleichzeitig entsprechen die Größen der Bedienelemente (Schaltflächen, Dialogfenster usw.) den Personalisierungseinstellungen.
Leider habe ich keinen 4K-Monitor, so dass ich nicht überprüfen kann, und aus dem gleichen Grund gebe ich eine solche Neuberechnung noch nicht in die Bibliothek ein - es ist nicht seriös, zufällig zu tun, ohne zu überprüfen.
Leider habe ich keinen 4K-Monitor, so dass ich nicht überprüfen kann, und aus dem gleichen Grund gebe ich eine solche Neuberechnung noch nicht in die Bibliothek ein - es ist nicht seriös, dies willkürlich und ohne Überprüfung zu tun.
Artem Hallo! Hier ist die Konstruktion unter Berücksichtigung von dpi.... Aber in der Tat kann man einen anderen Weg gehen. Nehmen wir an, Sie legen die Größe der Kopfzeile fest und berechnen die Größe des Panels, die Zeilenhöhe und die Texthöhe auf der Grundlage der Größe der Kopfzeile. Sie geben zwei Parameter an... und die dpi-Werte. oder gibt es damit ein Problem? Ich bin mir nicht ganz sicher. Was ist Ihre Meinung zu dieser Lösung?
Artem hallo! Hier ist ein auf dpi basierendes Build..... Aber im Grunde können Sie einen anderen Weg gehen. Nehmen wir an, Sie legen die Größe der Kopfzeile fest und berechnen die Größe der Panel-Zeilenhöhe und der Texthöhe auf der Grundlage der Größe der Kopfzeile. Sie geben zwei Parameter an... und die dpi-Werte. oder gibt es dabei ein Problem? Ich bin mir nicht ganz sicher. Was ist Ihre Meinung zu dieser Lösung?
Gute Idee mit dem Panel. Aber mir ist aufgefallen, dass das Panel spontan an den unteren Rand des Diagramms fällt, wenn man von einem anderen Diagramm zu ihm wechselt. Beispiel:
Gute Idee mit dem Panel. Aber mir ist aufgefallen, dass das Panel spontan an den unteren Rand des Diagramms fällt, wenn man von einem anderen Diagramm zu ihm wechselt. Beispiel:
Hmm. Interessantes Phänomen. Ich werde es mir in meiner Freizeit ansehen müssen. Höchstwahrscheinlich ist der Grund die Größenänderung des inaktiven Diagramms.