Galerie der in MQL geschriebenen UIs - Seite 45

 
hini #:
Ich habe das gif heruntergeladen, bin mir aber nicht sicher, ob es ein Problem mit meinem Betriebssystem ist. Ich melde es nur.
Ja, ich habe die Ursache gefunden. Wenn die Größe des Diagramms auf unterschiedliche Weise geändert wird, werden unterschiedliche Kombinationen von OnChartEvent()-Ereignissen ausgelöst. Beim manuellen Ändern kommt das OnChartChange-Ereignis 2 Mal (ich habe es überprüft). Beim Umschalten von Diagrammen - einmal oder zweimal. Beim Schließen des Navigator-Fensters einmal, aber andere Ereignisse kommen als CharEvent Custom. Beim Verschieben des Terminalfensters auf einen anderen Monitor - einmal.

Im Allgemeinen ist es notwendig, Bedingungen zu schreiben, die alle Varianten von Ereigniskombinationen beim Wechsel der Diagrammgrößen abfangen.
 
Ich möchte hinzufügen, warum Sie die Diagrammgrößen nicht einfach durch einen Vergleich mit den zuvor aufgezeichneten Größen überprüfen können.

Beim Umschalten von Diagrammen senden die ChartGetInteger()-Funktionen der Diagrammgrößen falsche Werte, was dazu führt, dass der Algorithmus "denkt", dass die Größen geändert wurden und die Taskleiste von ihrem Platz "springt". Ich musste hart arbeiten, um dieses Problem zu umgehen. Jetzt werde ich überprüfen, welche Werte der Diagrammgrößen bei diesen Ereignissen an die ChartGetInteger()-Funktionen gemeldet werden.
 
Das heißt, beim Umschalten von Diagrammen ändern sich die Größen nicht, aber das ChartChange-Ereignis kommt, aber die ChartGetInteger() Funktion meldet aus irgendeinem Grund IMMER die Größen 480 (Breite) und 167 (Höhe). Immer und bei jeder Diagrammgröße. (Build 2470. Ich habe die neue Version noch nicht geprüft).
 
In der neuen Version (4435) gibt die Funktion ChartGetInteger() beim Umschalten von Diagrammen die Werte 490 Breite und 103 Höhe zurück. Die tatsächlichen Diagrammgrößen sind 1068 Breite und 438 Höhe.

Beachten Sie, dass sich die Größen beim Umschalten der Diagramme nicht ändern.
 
Auf der Grundlage dieser Bedingungen werde ich weiterhin die Besonderheiten der eingehenden Ereignisse untersuchen, um echte Änderungen der Diagrammgrößen von fehlerhaften zu unterscheiden. Und wenn die Entwickler die Funktion korrigieren, werde ich einfach den Code vereinfachen. :)
 
Ich habe verschiedene Ereignisse zur Größenänderung des Diagramms getestet. Das Problem scheint nur beim Umschalten des Diagramms aufzutreten, bei dem keine tatsächliche Größenänderung stattfindet. Die Funktion ChartGetInteger() meldet jedoch dauerhaft 490 zu 103.

Bei den anderen Ereignissen ist alles in Ordnung.


Taskbar Fix in der nächsten Version.
 
Реter Konow Größenänderung des Diagramms getestet. Das Problem scheint nur aufzutreten, wenn das Diagramm umgeschaltet wird, in diesem Fall findet keine tatsächliche Größenänderung statt. Die Funktion ChartGetInteger() meldet jedoch durchgängig 490 bis 103.

Alle anderen Ereignisse sind in Ordnung.


Das Problem mit der Taskleiste wird in der nächsten Version behoben.
Vielen Dank für Ihre harte Arbeit! Ich freue mich auf Ihre Arbeit.
 
hini #:
Vielen Dank für die Arbeit, die Sie geleistet haben! Ich freue mich darauf, Ihre Arbeit zu sehen.
Ich danke Ihnen!
 

Gereinigt, neu kompiliert, neu installiert.

Ich werde auflisten, was mir aufgefallen ist, in keiner bestimmten Reihenfolge:

1. Nach dem Öffnen eines Fensters erscheint nichts in der Taskleiste. Nach dem Minimieren des Fensters wird die Schaltfläche angezeigt. Nach dem Ausklappen verschwindet sie nicht. Wenn das Konzept des Verhaltens "wie in Windows" gedacht ist, sollte es sofort erscheinen.

2. Bei einem dynamischen Fenster bleiben die Schaltflächen "Minimieren" und "Maximieren" nach dem Überfahren mit dem Cursor hervorgehoben, solange sich der Cursor innerhalb des Fensters befindet.

3. bei einem dynamischen Fenster wird die Kopfzeile nach dem Vergrößern grau, bleibt nach dem Zurückkehren grau und wird erst nach dem Verkleinern und Zurückkehren wieder farbig.

4. Das erweiterte Fenster blendet die Zeit- und Preisskalen im Chart nicht aus.

5. Eine Tabelle, die mit dem Befehl"i, AT, _X2X, "MF", 5, _Y2H, "Report", 5," unter"H_TAB, "Report" platziert wird, ignoriert die Einstellung des linken Randes. Dasselbe gilt für"i, AT, _X2X, "MF", 5, _Y2Y, "MF", 20,".

6. Das Wichtigste. Die Tatsache, dass das dynamische Fenster keine V_BOX zulässt, hat mein Design komplett verändert. Die beiden Tabellen befanden sich in ihren eigenen Boxen, um die Positionierung und das Scrollen zu erleichtern. Jetzt, da ich sie direkt auf dem "MF" zeichnen musste, kann ich die untere Tabelle nicht direkt unter der oberen Tabelle positionieren. Bindung "i, AT, _X2X, "MF", 5, _Y2H, "Tabelle1", 5," funktioniert nicht, weil der Gruppenname Table1 kein Element ist. Ich habe es geschafft, an die letzte Zeile der Tabelle zu binden, aber bei einer dynamischen Tabelle ist das keine Option. Ich habe nicht herausgefunden, wie ich mich auf die Tabelle und nicht auf die Gruppe beziehen kann. Wenn der Tabelle programmatisch Zeilen hinzugefügt werden sollen, wird die Art der Adressierung der Tabelle vorausgesetzt.

7. Noch eine Sache. Ihr dynamisches Fenster ist ein Peer-Fenster, das auf- und zugeklappt werden kann. Ich hätte gerne kein Fenster, sondern einen Desktop. Wie in deinem Konstruktor. So dass es

a) sich sofort ausgeklappt öffnet und das gesamte Diagramm abdeckt

b) keine Kopfzeile und keinen Rahmen hat (nur eine Taskleiste)

c) nicht eingeklappt werden kann

d) es erlaubt, Elemente wie ein normales Fenster zu platzieren.

Ersetzen Sie also DINAMIC durch FULLSCREEN oder DESKTOP. Die Grundlage dafür haben Sie bereits.

 
Edgar Akhmadeev #:

...

Danke für die ausführliche Stellungnahme.

Ich werde versuchen, Ihr Problem mit dem dynamischen Fenster zu lösen - die Komplexität der Tabellenanordnung.

Lassen Sie es mich so ausdrücken: Ein dynamisches Vollbildfenster hat einen besonderen Zweck in der Benutzeroberfläche und unterliegt daher bestimmten Beschränkungen. Es ist nicht universell wie das "SETTINGS"-Fenster. Und das ist auch logisch. Schließlich ist alles, was speziell "angepasst" wird, immer in irgendeiner Weise eingeschränkt.

Eine dynamische Tabelle oder eine unendliche Liste kann jedoch mit anderen Gruppen von Elementen in einem dynamischen Fenster kombiniert werden und benötigt keinen separaten, "alleinigen" Bereich, obwohl dies meiner Meinung nach bequemer ist. Wie lässt sich die Kompatibilität von Tabellen mit anderen Gruppen realisieren? - Dies ist eine Frage der Technik.

Zu Versuchszwecken werde ich Ihre Tabellen nehmen und versuchen, sie in ein Vollbildfenster einzufügen. Natürlich muss ich den Code korrigieren...

Das Ergebnis:

(Klicken Sie auf das Bild)


Ich werde den Code noch nicht veröffentlichen, denn ehrlich gesagt ist alles sehr "roh". Ich musste Tricks und "Krücken" verwenden. Aber, wie Sie sehen können, kann alles funktionieren.