Diskussion zum Artikel "Das MQL5-Kochbuch: Steuerelemente des Indikatorunterfensters - Die Schaltflächen" - Seite 7
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
Sind Sie so sicher, dass Ihr Artikel perfekt ist?
Ich freue mich sehr, dass Sie ihn gelesen haben.
Alle Fragen beantworte ich gerne im entsprechenden Thread.
===
Um keine unnötigen Missverständnisse aufkommen zu lassen: Ich habe nichts gegen Anatoly! Ein großes Lob an ihn für den Artikel! Aber es ist notwendig, die Fragen zu beantworten...
Verzeihung, störe ich Sie zufällig beim Schreiben eines weiteren Tutorials oder Rezepts?
Wenn nicht, lassen Sie uns weiter über Ihren Artikel über die Steuerung im Unterfenster des Indikators diskutieren. Sie bieten also eine Massenlösung (oder eine Idee) an, wie man ein bequemes Menü in einem Indikator erstellen kann. Gut, der Zweck des Artikels ist sehr würdig! Aber wie kann ein "Anfänger" Programmierer verwenden alle dieses Arsenal? Wo kann man benutzerdefinierte Funktionen platzieren? Zeigen Sie es an einem Beispiel. Und erklären Sie gleichzeitig, was Sie im Code ändern müssen, um z. B. 5 Schaltflächen zu verwenden? Betrachten Sie es als eine Anfängerfrage.
Nein, sind Sie nicht. Ich schreibe noch nichts. Ich muss mich mindestens einen Tag im Jahr ausruhen. Ausruhen ist nicht interessant, schon gar nicht für eine lange Zeit. )
Es ist keine Massenentscheidung und ich habe nicht darüber geschrieben. Lasst uns nicht etwas zuschreiben, was nicht passiert ist. Es wurde schon zu Beginn der Diskussion gesagt, dass dies keine Universallösung ist, sondern ein Spezialfall. Meiner Meinung nach ist es ein gutes Beispiel für einen Anfänger zum Üben. Und nicht eine fertige Lösung umsonst zu bekommen und mit offenem Mund und einem breiten Lächeln der Sonne entgegenzulaufen. ) Verstehen Sie das? Ich hätte gerne ein so einfaches und klares Beispiel ganz am Anfang des Programmierens. Vor allem, wenn es sich um die erste Programmiersprache in Ihrem Leben handelt und Sie vorher Ihr ganzes Leben lang in einem völlig anderen Bereich tätig waren, der in keiner Weise damit verbunden war.
Um 5 Schaltflächen zu erstellen, müssen wir in diesem Fall die Größe von Arrays ändern und unnötige Elemente bei der Deklaration von Arrays für die Namen von Objekten - Schaltflächen, angezeigter Text in Schaltflächen und Schaltflächenstatus - ausschließen.
Es gibt ein Array für Schaltflächenzustände, so dass das gleiche Prinzip verwendet werden kann, um zu prüfen, welche Schaltfläche gedrückt ist, und statt nur die Farbe der Schaltfläche zu ändern, eine andere (vom Benutzer gewünschte) Aktion durchzuführen. Dies können z.B. Handelsfunktionen sein (und nicht nur): Löschen aller ausstehenden Aufträge, Schließen aller Positionen, usw. Die Ideen sind endlos. Und wenn es keine Ideen gibt, dann haben Sie die falsche Art von Aktivität gewählt. )
Um dies zu implementieren, müssen Sie ein weiteres Array erstellen, das mit Bezeichnern einer benutzerdefinierten Aufzählung (die ebenfalls erstellt werden muss) initialisiert wird, zum Beispiel mit dem Namen ENUM_SCRIPT. Die Bezeichner werden dann aufgerufen, zum Beispiel: SCRIPT_01 =0, SCRIPT_02 =2 usw. Auch in der Schleife, wenn geprüft wird, ob die Schaltfläche auf dem Bedienfeld gedrückt ist, müssen Sie feststellen, welcher Bezeichner an die gedrückte Schaltfläche gebunden ist, und den aktuellen Zustand der Schaltfläche ermitteln.
Ich werde absichtlich keinen Beispielcode zeigen. Es soll eine Hausaufgabe für Anfänger sein. )
Ich habe die Änderungen vorgenommen, wie Sie gesagt haben:
Und das ist, was ich auf dem Bildschirm sah:
Wie kann ich das beheben? (Ich bin ein Anfänger)
Ich habe die Änderungen vorgenommen, wie Sie gesagt haben:
Und das ist, was ich auf dem Bildschirm sah:
Wie kann ich das beheben? (Ich bin ein Anfänger)
Etwa so:
Na toll! Es funktioniert.
Aber ich verstehe nicht, wie ich meine Funktionen mit den Schaltflächen verbinden kann. Zeigen Sie mir ein Beispiel.
Na toll! Es funktioniert.
Aber ich verstehe nicht, wie ich meine Funktionen mit den Schaltflächen verbinden kann. Zeigen Sie mir ein Beispiel.
Nun, lass uns das von dir begonnene "Anfängerspiel" fortsetzen. )
An welchem Punkt stecken Sie fest? Zeigen Sie einen Versuch, wie Sie an der aktuellen Stelle verstanden haben. Erstellen Sie eine Aufzählung mit fünf Bezeichnern und ein Array, dessen Elementen diese Bezeichner zugewiesen werden müssen.
Was machen wir also als nächstes?
Was machen wir also als nächstes?
Das ist die Art von Array, die Sie brauchen:
//--- Skripte ENUM_SCRIPT buttons_scripts[NUMBER_BUTTONS_HEIGHT][NUMBER_BUTTONS_WIDTH]= { {SCRIPT_01,SCRIPT_02,SCRIPT_03,SCRIPT_04,SCRIPT_05} };Dann müssen Sie eine Funktion wie diese schreiben:
...und diese Funktion in diesem Teil des Codes platzieren:
Und dann können Sie darüber nachdenken, wie Sie den Code optimieren können, wenn es nötig ist. :)
So habe ich es auch gemacht.
Das Programm, bei dem die Nachverfolgung beim Start aktiviert ist, schaltet sie beim Entladen aus. Und das Programm, das auf dem Chart verbleibt und Tracking benötigt, prüft, ob es aktiviert ist, und wenn es deaktiviert ist, aktiviert es es.
Es ist wünschenswert, Ihre Variante zu den Beispielen des Expert Advisors und des Indikatorcodes aus meinem Beitrag auf der vorherigen Seite zu geben , um Unklarheiten bei den Aussagen auszuschließen.
Es besteht keine Notwendigkeit, ständig zu prüfen, ob jemand die Verfolgung von Mausereignissen deaktiviert hat. Um genau zu sein, wenn Sie sich vor jeder Situation schützen wollen, können Sie es überprüfen, aber ich denke, das ist zu viel.
Vielleicht sollten wir den Entwicklern vorschlagen, CHARTEVENT_CHART_CHANGE zu erzeugen, wenn sich CHART_EVENT_MOUSE_MOVE ändert? Dann wäre es möglich, die notwendige Einstellung elegant wiederherzustellen, wenn der Expert Advisor läuft.
Bislang habe ich diese Variante:
Ich habe einen Indikator erstellt, aber mit einem Parameter: run with EnableMouseDetect = true - steuert das Tracking, false - gibt nur die Anzahl der Ereignisse aus, wenn das Tracking aktiviert ist.
------------------
Jetzt habe ich noch einmal darüber nachgedacht, und ich muss zustimmen, dass diese Option nicht funktionieren wird. Wenn Sie zuerst ein Programm ausführen, das die Maus verfolgt (es wird die Verfolgung aktivieren), dann das zweite (es wird sehen, was bereits aktiviert ist), und dann das erste löschen, wird es die Verfolgung deaktivieren, und das zweite wird mit nichts zurückgelassen werden. D.h. wir müssen uns eine Art Semaphor ausdenken, um zu signalisieren, dass Tracking benötigt wird.
Und in Anbetracht der hier durchgeführten Forschung (über die Belastung des Prozessors) ist eine solche Krücke nicht notwendig.
Ich schlage also vor, meinen Vorschlag den Entwicklern zu unterbreiten, und das Thema kann geschlossen werden.