Diskussion zum Artikel "Wie erstellt man ein grafisches Panel beliebiger Komplexität?" - Seite 8
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!
Ich habe eine solche Frage - ich möchte mehrere Registerkarten auf dem Handelspanel erstellen, d.h. durch Drücken einer Schaltfläche erscheint ein Satz von Elementen, durch Drücken einer anderen Schaltfläche erscheint ein anderer Satz von Elementen. Um die Elemente einer Registerkarte auszublenden, habe ich die Eigenschaft Hide() für dieses Element im onClick-Ereignishandler der Registerkarten-Schaltfläche angewendet und das Element ist nicht mehr auf dem Panel sichtbar, aber es verliert nicht seine Eigenschaften und wenn Sie auf die Stelle klicken, wo dieses Element war, dann wird onEvent() des Panels dieses Ereignis akzeptieren. Frage - wie man das ausgeblendete Element auch nicht auf irgendwelche Aktionen des Benutzers zu reagieren. Ich habe versucht, die Eigenschaft Element.Disable() in der onClick-Methode der Registerkarte Button wieder zu aktivieren, aber nichts passiert, das Element reagiert auf den Button-Klick, also reagiert immer noch, obwohl unsichtbar. Wie kann ich es programmatisch ausschalten, indem ich auf eine Registerkarte klicke, und es dann programmatisch einschalten, indem ich auf eine andere Registerkarte klicke?
Versuchen Sie, die Steuerelementbibliothek zu patchen: Es fehlt eine Zeile am Anfang der OnMouseEvent-Methode in der Datei Wnd.mqh:
Einzelheiten sind in dem Artikel beschrieben(Anwendung von OLAP im Handel (Teil 2) - der Artikel handelt von OLAP, aber es gibt einen Abschnitt über GUI, in dem das obige Problem angesprochen wird):
Im minimierten Zustand wird die Schaltfläche "Größe ändern" ausgeblendet und ist inaktiv. Das Problem liegt in der Methode CWnd::OnMouseEvent. Ihr fehlt eine solche Prüfung:
// if(!IS_ENABLED || !IS_VISIBLE) return false; - diese Zeile ist nicht vorhandenInfolgedessen fangen sogar deaktivierte und unsichtbare "Steuerelemente" Ereignisse ab. Offensichtlich könnte das Problem durch die Einstellung der entsprechenden Z-Reihenfolge der Steuerelemente gelöst werden. Aber auch hier haben wir einen Fehler gefunden - die Bibliothek berücksichtigt die Z-Reihenfolge der Elemente nicht. Wenn Sie sich die Methode CWndContainer::OnMouseEvent ansehen, werden Sie eine einfache Schleife in umgekehrter Reihenfolge durch alle untergeordneten Elemente sehen, ohne zu versuchen, ihre Priorität anhand der Z-Reihenfolge zu bestimmen.
Es ist also entweder ein weiterer "Patch" der Bibliothek oder ein "Trick" in einer abgeleiteten Klasse erforderlich.
Im Prinzip gibt es in der Standard-Kontrollbibliothek eine Menge, das behoben werden muss. Aus diesem Grund wurde eine alternative, bereits gepatchte Implementierung von ControlsPlus geschrieben - Sie können sie in ihrer Gesamtheit im Artikel MQL als Mittel zur Markierung der grafischen Oberfläche von MQL-Programmen erhalten . Teil 2 (bei Interesse gibt es die Teile 1 und 3).
Versuchen Sie, die Kontrollbibliothek zu patchen: In der Datei Wnd.mqh fehlt eine Zeile am Anfang der Methode OnMouseEvent:
Einzelheiten sind in dem Artikel beschrieben(Application of OLAP in Trading (Part 2) - der Artikel handelt von OLAP, aber es gibt einen Abschnitt über GUI, in dem das obige Problem angesprochen wird):
Im Grunde gibt es eine Menge Dinge in der Standard-Steuerungsbibliothek, die angepasst werden müssten. Deshalb wurde eine alternative, bereits gepatchte, ControlsPlus-Implementierung geschrieben - Sie können sie in ihrer Gesamtheit im Artikel MQL als Mittel zur Markierung der GUI von MQL-Programmen finden . Teil 2 (bei Interesse gibt es die Teile 1 und 3).
Vielen Dank, wir werden es versuchen.
Wie schreibt/übermittelt man Text an CLabel von OnTick ?
class CControlsDialog : public CAppDialog
{
private:
CLabel m_label;// CLabel-Objekt
.....
void OnTick()
{
m_label.Text(DoubleToString(Ask,4));
....
Ich erhalte einen Fehler
'm_label' - nicht deklarierter Bezeichner ...
was ist falsch?
Wie schreibe/übertrage ich Text in CLabel von OnTick?
Ich erhalte den Fehler'm_label' - nicht deklarierter Bezeichner ...
Was ist falsch?
Haben Sie die Bindung an das Diagramm, die Koordinaten usw. wie in der hier in der Hilfe gezeigten Funktion CreateLabel() vorgenommen?
Und die Bindung an das Diagramm, die Koordinaten usw. wie in CreateLabel() ist hier in der Hilfe gezeigt, haben Sie es getan?
ja
Wenn Sie den Text genau dort in das Objekt schreiben, ist alles in Ordnung.
Aber wenn ich versuche, ihn in OnTick zu schreiben, schlägt es fehl.
Sie müssen das Objekt doch nicht bei jedem Tick neu erstellen, oder?ja
Wenn Sie genau dort Text in das Objekt schreiben, ist alles in Ordnung.
Aber wenn ich versuche, ihn in OnTick zu schreiben, schlägt es fehl.
Sie müssen das Objekt doch nicht bei jedem Tick neu erstellen, oder?Was passiert, wenn m_label in den öffentlichen Bereich verschoben wird?
Das habe ich versucht, der gleiche Fehler.
Es ist nur so, dass ich es auf 4pc mache.
Ich denke, das ist das Problem.
Und das hier funktioniert nicht, obwohl es kompiliert.
m_scroll_v1. Disable(); (Ich versuche, Radio-Buttons zu wechseln, es ist interessant, die Schnittstelle zu ändern). Destroy() funktioniert, aber Disable will es nicht tun
versucht
Es ist nur so, dass ich es mit einem 4RK mache.
Ich glaube, das ist das Problem.
Und das hier funktioniert nicht, obwohl es kompiliert.
m_scroll_v1. Disable(); (Ich versuche, Radiobuttons umzuschalten, es ist interessant, die Schnittstelle zu ändern). Destroy() funktioniert, aber Disable will es nicht tun
Alles funktioniert in 4. Und das Objekt, das Sie definiert haben. Sie sollten einen Aufruf davon machen, wie Panel.m_label.Text( "Max.Margin").
Es funktioniert so.
Danke!
Ich habe zuerst das übergeordnete Objekt hinzugefügt und es dann in den öffentlichen Bereich verschoben und es funktioniert.
und dies ist m_scroll_v1. Disable(); funktioniert noch nicht
Das funktioniert so
Vielen Dank!
Zuerst das Elternteil hinzugefügt, dann auf öffentlich verschoben und es funktioniert
und dieses m_scroll_v1. Disable(); funktioniert noch nicht