Mein Ansatz. Der Kern ist der Motor. - Seite 170
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
Sehr witzig :)))
Gut gemacht, du******* einen Kuchen aus dem Regal nehmen.
OK, ich werde versuchen, es zu rechtfertigen:
Wenn Sie sich an Ihre Lösung halten, muss der Benutzer immer noch den Quellcode der statischen Klasse in das Projekt kopieren, die Ereignisse übersetzen, das Formular in einem separaten Thread ausführen usw. Außerdem müssen Sie das Formular statisch mit dieser Klasse verknüpfen, d.h. Sie müssen den Namen der Formularklasse und ihrer Komponenten explizit angeben. D.h. Sie müssen Ihren Ebenencode explizit ändern, wenn ein Formular geändert oder ein Element hinzugefügt wird. Mit anderen Worten, eine einfache und geradlinige Lösung würde gut funktionieren, um die Interaktion mit einem bestimmten Formular zu demonstrieren, wie Sie es hier gezeigt haben. In einem allgemeinen Fall ist es besser, die Steuerlogik von der Anzeigelogik zu trennen, was ich auch getan habe. Durch diese Trennung können Sie den Controller auch vor unqualifizierten Änderungen schützen.
Hier ist ein Kommentar, der genau die Frage beantwortet, warum es so gemacht wurde und nicht andersherum:
Sie haben wahrscheinlich Recht, es ist einfacher für einen Benutzer, grafische Elemente in einem Formular in VS2017 zu skizzieren, dann zu überprüfen, indem er seine Kreation in VS ausführt, nachdem er sichergestellt hat, dass "alles spinnt", kann er dazu übergehen, eine Programminteraktion in .Net und MT5 zu erstellen
...
Ihr Weg ist wahrscheinlich praktischer.
Ganz genau. Es wird eine riesige Datenbank von Cyb-Codes mit Bildern geben. Gehen Sie hinein, wählen Sie aus, holen Sie den Code, fügen Sie ihn in den Konstruktor ein, holen Sie den Kern mit den Verbindungsdateien. Und die Verbindung ist bereits durchdacht und viel einfacher.
Jedes Formular befindet sich also in einer eigenen Datei. Selbst wenn es einfacher wäre, sind die Möglichkeiten begrenzt.
Auch hier befindet sich also jedes Formular in einer eigenen Datei. Selbst wenn es einfacher wäre, sind die Möglichkeiten begrenzt.
Um ehrlich zu sein, habe ich die Technologie noch nicht ganz verstanden, daher kann ich noch nichts über die Grenzen von Vasiliys Lösung sagen.
Basil, nichts für ungut, aber ein Panel wie dieses:
Ich habe ungefähr diese Art von Code:
Dieser Code kann einfach untereinander weitergegeben oder in eine gemeinsame Basis gestellt werden, und es ist nicht nötig, für jeden ein eigenes Formular zu zeichnen.
Ich fügte es in den Konstruktor ein und erhielt ein weiteres Fenster mit allen Elementparametern und Verbindungen.
Peter, um das gleiche Panel wie du zu zeichnen, muss ich deine Auszeichnungssprache lernen. Der Benutzer braucht nichts weiter als eine Maus und grundlegende Kenntnisse, um dieses Panel in Visual Studio zu zeichnen. Spüren Sie den Unterschied?
Um ehrlich zu sein, habe ich die Technologie noch nicht ganz verstanden, daher kann ich noch nichts über die Grenzen von Vasiliys Lösung sagen.
Und ich habe nicht über die Grenzen der Lösung von Vasiliy geschrieben.
Peter, um das gleiche Panel wie du zu zeichnen, muss ich deine Auszeichnungssprache lernen. Der Benutzer braucht nichts, um dieses Panel in Visual Studio zu zeichnen, nur eine Maus und grundlegende Kenntnisse. Können Sie den Unterschied spüren?
Vasily, eine Person studiert meine Auszeichnungssprache und schreibt das Panel. Tausend andere sehen das Bild der Tafel und übernehmen den vorgefertigten Cyber-Code. Sie fügen es in meinen Konstruktor ein und erhalten das Panel in ihrem Programm.
Vorgelesen, aber ich werde weiter lesen, um die Details zu verstehen.
1. Warum wird in dem Artikel von 5 Anfragen pro Sekunde gesprochen? Ich habe eine Frequenz von 30 ms.
2. Können Sie mir zeigen, wie eine Verbindung zu einer Tabelle mit tausend Zellen aussieht?
3 Soweit ich es verstehe, wird der Aufruf der Elemente im Formular durch ihre Namen an die FunktionGuiController::SendEvent? Müssen Sie alle Parameter angeben? Name, Ereignis, Wert? Noch ein paar Nullen... Und in den Timer, um eine Schleife auf Ereignisse zu tun?
Mit anderen Worten, der Benutzer erstellt die Ereigniswarteschlange selbst und übergibt sie dann an den Controller im Timer?
Ich muss mich bei Ihnen bedanken, für die tolle Förderung meines Themas.
1) Es macht keinen Unterschied. Sie können jede gewünschte Frequenz einstellen.
2) Tabellen werden jetzt nicht mehr unterstützt (übrigens ein guter Grund für Ihren Jubel:)
3) Ja, bei der namentlichen Adressierung müssen Sie alle Parameter angeben. Aber, und das ist das Wichtigste, es gibt kein einziges monolithisches Ereignismodell. Wenn Sie Ihr eigenes Modell wollen, sind Sie herzlich willkommen. Es ist elementar, es zu machen. Aber ohne Timer geht es nicht.
Die Ereigniswarteschlange ist ein verallgemeinerter Algorithmus zur zuverlässigen Behandlung von Ereignissen. Der Benutzer stellt nichts zusammen; die von ihm erzeugten Ereignisse gelangen von selbst in die Warteschlange. Die Warteschlange selbst besteht in 99,9 % der Fälle aus nur einem Ereignis.
OK, ich werde versuchen, es zu rechtfertigen:
Wenn wir uns an Ihre Lösung halten, muss der Benutzer immer noch den Quellcode der statischen Klasse in das Projekt kopieren, das Ereignisse übersetzt, das Formular in einem separaten Thread ausführt usw. Außerdem müssen Sie das Formular statisch mit dieser Klasse verknüpfen, d. h. Sie müssen den Namen der Formularklasse und ihrer Komponenten explizit angeben. D.h. Sie müssen Ihren Ebenencode explizit ändern, wenn ein Formular geändert oder ein Element hinzugefügt wird. Mit anderen Worten, eine einfache und geradlinige Lösung würde sich gut eignen, um die Interaktion mit einem bestimmten Formular zu demonstrieren, was Sie ja auch gezeigt haben. In einem allgemeinen Fall ist es besser, die Steuerlogik von der Anzeigelogik zu trennen, was ich auch getan habe. Durch diese Trennung können Sie den Controller auch vor unqualifizierten Änderungen schützen.
Hier ist ein Kommentar, der genau die Frage beantwortet, warum es so gemacht wurde und nicht andersherum:
Das größte Problem ist das Starten des Formulars in einem separaten Thread, aber das wird durch zwei Codezeilen gelöst, so dass es letztendlich kein Problem darstellt. Außerdem habe ich in meinem Beispiel absichtlich das zweite Formular geöffnet, um zu zeigen, wie leicht und einfach es ist, und wie man eine beliebige Anzahl von Formularen in separaten Threads öffnen kann.
Und das, was in dem Zitat hervorgehoben wird - ist Heu und Stroh dasselbe? Ja, um eine Banane zu essen, muss man die Schale abziehen.
Um ehrlich zu sein, habe ich die Technologie noch nicht ganz verstanden, daher kann ich noch nichts über die Grenzen von Vasiliys Lösung sagen.
Es gibt keine Kapazitätsgrenze, alles ist begrenzt, weder mehr noch weniger als die Funktionalität der grafischen Elemente von Windows, lesen Sie den Artikel"Unter der Motorhaube von GuiController", fügen Sie die erforderlichen Steuerelemente in den Formular-Designer und fügen Sie MT5 in <Element - Liste der Event-Handler>, was Sie denken, müssen Sie empfangen
2) Tabellen werden nicht mehr unterstützt (übrigens ein Grund zur Freude:)
Ich werde auch gratulieren Peter, machte ich eine Tabelle Arbeit in einem separaten Formular in .dll auf .Net, Rechtsklick-Ereignisse, Sortierung und andere Reize dataGridView alle arbeiten, hat zum Teil Experimente Tabelle als das Terminal, sondern eher launisch und langsam dataGridView , habe ich versucht, viele Dinge mit ihm ( und füllte einen Klon datatable und dann auf die datatable, die zu einem dataGridView verknüpft ist und kopiert . und googeln für eine Woche und experimentieren, während mit dataGridView ein komplettes Fiasko - Sie können nicht schreiben, um es mehr als 3-5 Sekunden) die 10x11 Tabelle ist bereits kritisch, obwohl das Formular mit der Tabelle und läuft in einem separaten Thread
SZY: Ich habe vor 5 Jahren in Delphi ein StringGrid an MT4 angehängt, ich war überhaupt nicht besorgt darüber, wie es funktionierte, aber alles war fliegend, jedoch mit dem Microsoft dataGridView ist ein Problem, heute werde ich versuchen, mit SourceGrid zu experimentieren, nach Rückmeldungen ist es schneller als dataGridView