Diskussion zum Artikel "Grafisches Interface X: Sortieren, Neuerstellen der Tabelle und Steuerelemente der Zellen (build 11)" - Seite 4

 
Anatoli Kazharski:

1. Wenn Sie die Erstellung einer grafischen Oberfläche für Ihre in Entwicklung befindliche MQL-Anwendung abschließen und diese mit einigen Handelsfunktionen füllen, müssen Sie möglicherweise die Werte des Programms initialisieren, wenn es geladen/nachgeladen wird. Dies ist hier nur ein Beispiel, da es von und zu der benutzerdefinierten CProgram-Klasse funktionieren soll. Ich werde später einige ausführlichere Beispiele zeigen, wenn ich die Entwicklung der Bibliothek abgeschlossen habe. Die zweite Phase wird bald abgeschlossen sein und es wird möglich sein, echte Beispiele von MQL-Anwendungen mit dieser Bibliothek zu präsentieren.

2. Das Formular sollte auch ähnliche Stretch-Eigenschaften haben.

3. Ja, obligatorisch.

//---

P.S. Im Moment ist die neueste Version der Bibliothek in diesem Artikel: GUIs X: Textauswahl in einem mehrzeiligen Eingabefeld (Build 13).


Danke, übrigens ist mir ein Array-Überlauffehler aufgefallen, wenn man im Beispiel 11_01 die letzte Zeile auswählt und z.B. die erste Zeile löscht, und dann wieder die letzte Zeile auswählt, bekommt man:

2017.04.19 20:27:52.564 TestLibrary11_01 (RUAL,H1) array out of range in 'CanvasTable.mqh' (1897,19)

Achten Sie nicht auf den Namen TestLibrary11_01, dies ist Beispiel 11_01, die Bibliothek ist die neueste, d.h. die 13.


Noch eine Frage: Welche Methode wird verwendet, um den Tap-Schritt auf den Schiebereglern zu ändern, da der Standardschritt zu klein ist?

 
Konstantin:


1. danke, übrigens, ich habe einen Array-Überlauffehler bemerkt, wenn man im Beispiel 11_01 die letzte Zeile auswählt und z.B. die erste Zeile löscht, und dann die letzte Zeile wieder auswählt, erhält man: 2017.04.19 20:27:52.564 TestLibrary11_01 (RUAL,H1) array out of range in 'CanvasTable.mqh' (1897,19)

2. Eine weitere Frage, welche Methode wird verwendet, um den Tap-Schritt auf den Schiebereglern zu ändern, da der Standardschritt zu klein ist?

1. Ich werde das überprüfen und für das nächste Update korrigieren.

2. Noch nicht implementiert. Wird gemacht.

 

Wenn nur die Tabellenfunktionalität benötigt wird und die Bindung an das CWindow-Formular obligatorisch ist, ist es möglich, diese nicht zu aktivieren:

1. die Menüsteuerung

2. Schaltfläche zum Löschen des Formulars

3. Wie kann man Zellenwerte in der Tabelle aktualisieren? (Frage entfernt, ich habe den Parameter redraw in der Methode SetValue gesehen) :))

4. Nicht ganz klare Methode SetValue(const uint column_index,const uint row_index,const string value="",const uint digits=0,const bool redraw=false), warum die Aufteilung in string type der gespeicherten Daten und real? Meiner Meinung nach ist es besser, String in der Tabelle zu speichern. Aber wenn es so notwendig ist, ist es besser, taktisch zwei Methoden zu erstellen.

Ich konnte nicht verstehen, über die Verwendung von OnInitEvent Methode, ich werde für Beispiele warten.

 
Konstantin:

Wenn nur die Tabellenfunktionalität benötigt wird und die Bindung an das CWindow-Formular obligatorisch ist, ist es möglich, diese nicht zu aktivieren:

1. die Menüsteuerung

2. Schaltfläche zum Löschen des Formulars

3. Wie kann man die Zellenwerte in der Tabelle aktualisieren?

Die Verwendung der OnInitEvent-Methode konnte ich nicht verstehen, ich warte auf Beispiele.

1. In der Benutzerklasse der MQL-Anwendung CProgram konstruieren Sie die grafische Oberfläche selbst. Wenn Sie also das Hauptmenü nicht benötigen, erstellen Sie diese Elemente einfach nicht in dieser Klasse.

2. Nein. Dies ist eine obligatorische Schaltfläche auf dem Formular. Sie können die Anwendung nicht versehentlich aus dem Diagramm entfernen, indem Sie darauf klicken, denn es erscheint ein Fenster zur Bestätigung dieser Aktion.

3. Siehe das Beispiel in diesem Artikel: Graphical Interfaces X: Aktualisierungen der Zeichentabelle und Code-Optimierung (Build 10). Kurz gesagt, verwenden Sie die Methode CCanvasTable::SetValue().


 
Anatoli Kazharski:

1. In der Benutzerklasse der MQL-Anwendung CProgram konstruieren Sie die grafische Oberfläche selbst. Wenn Sie also das Hauptmenü nicht benötigen, legen Sie diese Elemente in dieser Klasse einfach nicht an.

2. Nein. Dies ist eine obligatorische Schaltfläche auf dem Formular. Sie können die Anwendung nicht versehentlich aus dem Diagramm entfernen, indem Sie darauf klicken, denn es erscheint ein Fenster zur Bestätigung dieser Aktion.

3. Siehe das Beispiel in diesem Artikel: Graphical Interfaces X: Aktualisierungen der Zeichentabelle und Code-Optimierung (Build 10). Kurz gesagt, verwenden Sie die Methode CCanvasTable::SetValue().



Zu Punkt 2: Treffen Sie eine Auswahl von Schaltflächen für das Formular, auch MessageBox hat anpassbare Schaltflächen-Sets. In Qt ist es auch möglich, Sets dieser Buttons zu ändern, in der Standardbibliothek MetaQuotes sind sie ebenfalls änderbar.
 
Konstantin:

...

4. Die Methode SetValue(const uint column_index,const uint row_index,const string value="",const uint digits=0,const bool redraw=false) ist nicht ganz klar, warum die Aufteilung in string type der gespeicherten Daten und real? Meiner Meinung nach ist es besser, String in der Tabelle zu speichern. Aber wenn es so notwendig ist, ist es besser, taktisch zwei Methoden zu erstellen.

Ich verstehe das mit dem Datentyp nicht. Sie werden alle als String gespeichert. Der Datentyp wird für jede Spalte durch die Methode DataType() für die Sortierung angegeben. Und mit dem Parameter digits in der Methode SetValue() können Sie die Anzahl der Ziffern nach dem Trennzeichen für jede Zelle einzeln angeben.
 
Konstantin:

Zu Punkt 2: Bitte treffen Sie eine Auswahl von Schaltflächen für das Formular, auch MessageBox hat anpassbare Schaltflächensätze. In Qt ist es auch möglich, die Sets dieser Buttons zu ändern, in der Standardbibliothek MetaQuotes sind sie auch änderbar.

Momentan sind die Schaltflächen:

  1. Fenster schließen
  2. Fenster zusammenklappen/erweitern
  3. Tooltips.

Was brauchen Sie noch?

 
Anatoli Kazharski:

Es gibt jetzt Schaltflächen:

  1. Fenster schließen
  2. Fenster zusammenklappen/erweitern
  3. Tooltips.

Was brauchen Sie noch?


Ich spreche davon, dass dieser Satz veränderbar gemacht werden sollte, man braucht nicht immer alle drei dieser Schaltflächen ))
 
Anatoli Kazharski:
Ich verstehe nicht, was mit dem Datentyp gemeint ist. Sie werden alle als String gespeichert. Der Datentyp wird für jede Spalte mit der Methode DataType() für die Sortierung angegeben. Und mit dem Digits-Parameter in der SetValue()-Methode können Sie die Anzahl der Ziffern nach dem Trennzeichen für jede Zelle einzeln angeben.


))) jetzt verstehe ich, übrigens hat DataType( ) standardmäßig welchen Typ? Oder gibt es keine Voreinstellung und es ist notwendig, den Typ des gespeicherten Wertes zu bestimmen, bevor man ihn der Zelle hinzufügt?

PS. Ich vergaß zu schreiben, nicht immer geladen Ressource Bilder im Menü, obwohl es sein kann, weil ich in einer Virtualisierung sitzen.

 
Konstantin:

Ich meine damit, dass dieses Set veränderbar gemacht werden sollte, man braucht nicht immer alle drei dieser Knöpfe ))

2 und 3 können schon jetzt weggelassen werden. In der Methode der Formularerstellung in der CProgram-Benutzerklasse werden keine Methoden aufgerufen:

   m_window.UseRollButton();
   m_window.UseTooltipsButton();