Mein Ansatz. Der Kern ist der Motor. - Seite 170

 
jdjahfkahjf:
Sie haben noch nicht erkannt, dass die Zukunft des Handels und sein Höhepunkt die Tasten sind.
Und diese Knöpfe, Peter, werden an andere Verkäufer verkauft. Wer wiederum verkauft was? Sie haben es erraten, auch Knöpfe.
Um jedoch Knöpfe an andere Knopfverkäufer zu verkaufen, muss er Knöpfe von anderen Knopfherstellern kaufen.

Sehr witzig :)))

 
Dmitry Fedoseev:

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:

Igor Makanu:

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.

 
Реter Konow:

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.

 
Dmitry Fedoseev:

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.

 
Реter Konow:

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?

 
Реter Konow:

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.

 
Vasiliy Sokolov:

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.

 
Реter Konow:

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.

 
Vasiliy Sokolov:

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.

 
Реter Konow:

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

Vasiliy Sokolov:

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