Fragen zu OOP in MQL5 - Seite 15

 
Vasiliy Pushkaryov:

Entschuldigung für die Fehlinformation, ich habe vorhin geschrieben, dass man die Methode Create() nicht in einer untergeordneten Klasse aufrufen kann.

Jetzt doppelt geprüft, können Sie. Der Zugang zum privaten Mitglied m_button war jedoch nicht verfügbar. D.h. es war nicht möglich, z.B. den Zustand der Taste zu überprüfen : gedrückt/freigegeben.

Mit Igors Hinweis ist das jetzt möglich.

Es gibt dort keine Probleme mit Schaltflächen, ich erinnere mich nicht, aber diese Klasse hatte fertige Methoden (keine Felder) - um den Zustand zu bestimmen, wenn nicht, prüfen Sie IsActive() oder PropFlags() oder StateFlags() - es war definitiv etwas bereit, um herauszufinden, was mit der Schaltfläche jetzt los ist

Ich werde Ihnen den zweiten Hack mit Grafiken in MQL erzählen - Sie können den Namen der Schaltfläche ( Name()) herausfinden und durch den Namen finden und den Zustand über ObjectGetInteger() und andere Funktionen erhalten, aber um zu vermeiden, es ungeschickt zu tun, schreiben Sie in Ihrer Klasse Methoden, um die Eigenschaften über ObjectGetInteger() zu erhalten


so ;)

PS: Ich kämpfte auch mit SB - ich konnte nicht herausfinden, warum die Kontrollkästchen nach dem Minimieren und Maximieren des Panels ausgewählt werden - als ob die Maus auf das Objekt geklickt wurde... als ich erkannte, dass ich nicht die gesamte SB erneut lesen wollte, erstellte ich meinen eigenen Handler, der nach dem Minimieren des Formulars über ObjectSetInteger() die deselektierte Objekteigenschaft für meine Kontrollkästchen setzen würde

 
Igor Makanu:

es gibt kein Problem mit Battons, ich erinnere mich nicht, aber diese Klasse hatte bereit Methoden (nicht Felder) - um den Zustand zu bestimmen, wenn nicht, dann überprüfen Sie IsActive() oder PropFlags() oder StateFlags() - genau das, was bereit war es, um herauszufinden, was mit der Schaltfläche jetzt ist

Ich werde Ihnen den zweiten Hack mit Grafiken in MQL erzählen - Sie können den Namen der Schaltfläche ( Name()) herausfinden und durch den Namen finden und den Zustand über ObjectGetInteger() und andere Funktionen erhalten, aber um zu vermeiden, es ungeschickt zu tun, schreiben Sie in Ihrer Klasse Methoden, um die Eigenschaften über ObjectGetInteger() zu erhalten

so ;)

PS: Ich kämpfte mit SB auch - ich konnte nicht finden, warum Kontrollkästchen nach Minimieren und Maximieren des Panels ausgewählt werden - als ob meine Maus auf das Objekt geklickt wurde... Ich beschloss, ich wollte nicht die ganze Sache neu zu lesen - ich baute meine eigenen Handler, die nach Minimieren des Formulars, die deselektierte Objekteigenschaft für meine Kontrollkästchen über ObjectSetInteger().

Ich bin auch auf dieses Problem gestoßen. Ich musste das Dialogfeld in meinen eigenen Farben einfärben. Es stellte sich auch heraus, dass sie im privaten Bereich versteckt waren. Ich konnte dieses Problem lösen, indem ich eine Methode verwendete, die ObjectGetInteger() nutzte, um die Felder direkt zu malen. Und nach dem Verkleinern und Entfalten war es auch ein Chaos.

So sieht die Kopfzeile aus, bevor sie zum ersten Mal minimiert wurde:


Und das ist danach.


Ich konnte auch nicht herausfinden, warum bei den Schaltflächen "Schließen" und "Ausklappen" die Standardfarbe zurückgegeben wird.

 
Vasiliy Pushkaryov:

Das habe ich auch schon erlebt. Ich musste das Dialogfeld von SB in seinen eigenen Farben einfärben. Es stellte sich heraus, dass sie auch im privaten Bereich versteckt waren. Ich konnte das Problem mit einer Methode lösen, die ObjectGetInteger() verwendet, um das Panel direkt zu zeichnen. Und nach dem Verkleinern und Entfalten war es auch ein Chaos.

So sieht die Kopfzeile aus, bevor sie zum ersten Mal minimiert wurde:


Und das ist danach.


Ich konnte auch nicht herausfinden, warum die Standardfarbe für die Schaltflächen "Schließen" und "Ausklappen" zurückgegeben wird.

Ich warf noch einen Blick auf den lokalen Standard und wurde von meiner Entscheidung überzeugt, meine eigene Bibliothek zu schreiben)))
 
Vladimir Simakov:
Wieder einmal sah ich mir die lokale Norm an und war von der richtigen Entscheidung überzeugt, meine Bibliothek zu schreiben)))

Über den Button-Moment habe ich hier geschrieben, hier ein Auszug daraus:

Solange Sie die Taste langsam, etwa einmal pro Sekunde, drücken, funktioniert es gut. Wenn Sie ein wenig schneller schieben, wird das Ereignis oft nicht abgefangen.

Haben Sie solche Probleme in Ihrer Bibliothek festgestellt? Ich würde gerne wissen, ob es an der SB-Implementierung oder an der Architektur der Ereignisbehandlung liegt, und ob es sich nicht umgehen lässt?

 
Vasiliy Pushkaryov:

... Ich möchte wissen, ist dies die Umsetzung der SB oder ist es die Ereignisbehandlung Architektur und es gibt keinen Weg um es?

Sie können eine Schaltfläche selbst als grafisches Objekt erstellen, ohne die Bibliothek zu verwenden, und ihre Funktion mit der einer mit der Bibliothek erstellten Schaltfläche vergleichen.

 
Dmitry Fedoseev:

Sie können eine Schaltfläche als grafisches Objekt selbst erstellen, ohne die Bibliothek zu verwenden, und ihre Funktion mit einer Schaltfläche vergleichen, die mit der Bibliothek erstellt wurde.

Danke für die Idee, ich werde es ausprobieren.
 
Vasiliy Pushkaryov:

Ich habe hier den Moment mit den Knöpfen geschrieben, Auszug von dort:

Haben Sie solche Probleme in Ihrer Bibliothek festgestellt? Ich würde gerne wissen, ob es an der SB-Implementierung oder an der Architektur der Ereignisbehandlung liegt und ob man das Problem nicht umgehen kann?

Wenn Sie für sich selbst schreiben (nicht auf dem Markt), ist es einfacher, Fenster mit Schaltflächen in C# zu machen und von MQL .dll in C# aufzurufen - jede Fantasie mit Schaltflächen, Symbolen, Kontrollkästchen, etc. ist in C# in einer halben Stunde realisiert - eine Stunde, aber ich musste Material für eine Woche googeln.

Das Einzige, was Sie tun müssen, ist, sich die Leiste anzusehen, die Sie im Terminal-Verzeichnis haben, und sie zu benutzen, um Ihre eigene Schnittstelle zu erstellen - das ist meine Erfahrung, ich habe alles gelernt, was ich darüber wissen muss

SZS: Mir ist gerade eingefallen, dass ich ein einfaches Panel in die Codebasis gestellt habe, keine Schaltflächen, aber es gibt Textbeschriftungen und der Code ist so einfach wie möglich. https://www.mql5.com/ru/code/25897

 
Dmitry Fedoseev:

Sie können eine Schaltfläche als grafisches Objekt selbst erstellen, ohne die Bibliothek zu verwenden, und ihre Leistung mit einer Schaltfläche vergleichen, die mit der Bibliothek erstellt wurde.

Ja, aus einem alten Job, als ich noch nicht mit SB gearbeitet habe, habe ich eine Art Schließknopf gemacht. Es funktioniert schnell:


Es stellte sich heraus, dass das Problem in der SB-Implementierung liegt.

 
Vasiliy Pushkaryov:

Ja, aus einem alten Job, als ich noch nicht mit SB gearbeitet habe, habe ich eine Art Close Button gemacht. Es funktioniert schnell:


Es stellt sich heraus, dass das Problem in der SB-Implementierung liegt.

DieStandardbibliothek impliziert, dass die Steuerelemente auf dem Formular erstellt werden. Sie sollen überhaupt nicht funktionieren, einfach so. Zumindest war das früher so.

 
Igor Makanu:

Wenn Sie für sich selbst schreiben (nicht auf dem Markt), ist es einfacher, Fenster mit Schaltflächen in C# zu machen und rufen Sie von MQL .dll in C# - jede Phantasie mit Schaltflächen, Symbole, Kontrollkästchen, etc. kann in C# in einer halben Stunde realisiert werden - Stunde, aber ich hatte zu googeln Material für eine Woche.

Das Einzige, was Sie tun müssen, ist, sich den Balken anzuschauen, den Sie im Indikatorenordner haben, und ihn als Basis zu verwenden - es ist viel schneller, Ihre eigene Schnittstelle zu erstellen, aber das ist wiederum meine Erfahrung - ich habe es so verstanden

ZS: Ja, ich erinnere mich, ich habe ein einfaches Panel in Codebase eingefügt, keine Schaltflächen, aber es gibt Textbeschriftungen und der Code ist so einfach wie möglich. https://www. mql5.com/ru/code/25897

Nein, ich kenne kein C#.

Ich werde mir das Panel ansehen, vielen Dank.

Grund der Beschwerde: