Diskussion zum Artikel "Grafische Interfaces IV: Informierende Interface-Elemente (Kapitel 1)"

 

Neuer Artikel Grafische Interfaces IV: Informierende Interface-Elemente (Kapitel 1) :

Zum aktuellen Stand der Entwicklung, beinhaltet die Bibliothek für die Erzeugung von grafischen Interfaces ein Formular und verschiedene Steuerelemente (Controls), welche dem Formular hinzugefügt werden können. Wie zuvor schon erwähnt, sollte sich einer der zukünftigen Artikel mit dem Thema Multi-Window-Modus beschäftigen. Dafür liegt nun alles vor, und wir werden in dem folgenden Kapitel dieses Thema behandeln. In diesem Kapitel schreiben wir Klassen für die Erzeugung der Statusbar und des Tooltip-Elementes.

Die Statusbar ist eine der informierenden Elemente des grafischen Interfaces. Dieses Element wird für die schnelle Eingabe von wichtigen Daten, Details und Werten verwendet. Auch die MetaTrader Terminals besitzen eine solche Statusbar.

In diesem Artikel werden wir eine einfache Statusbar, ohne die Möglichkeit ein Kontextmenü hinzuzufügen, erzeugen. Wie auch bei anderen Interfaceelementen, besteht die Statusbar aus verschiedenen einfachen Objekten:

  • Hintergrund
  • Elemente.
  • Trennlinien.

Abbildung  1. Komponenten der Statusbar.

Abbildung 1. Komponenten der Statusbar.


Wenn wir alles richtig gemacht haben, dann sollte das Ergebnis wie in dem nachfolgenden Screenshot gezeigt aussehen:

Abbildung  2. Test des Statusbar-Elementes

Abbildung 2. Test des Statusbar-Elementes

Wir haben die Entwicklung der Klasse für die Erzeugung des Statusbar-Elementes abgeschlossen Sie finden die vollständigen Versionen in den Dateien die diesem Artikel beigefügt sind.

Autor: Anatoli Kazharski

 
MetaQuotes Software Corp.:

Veröffentlichter Artikel Graphical Interfaces IV: Interface Information Elements (Kapitel 1):

Autor: Anatoli Kazharski

Anatoly, großartige Artikelserie, und relevant. Könnten Sie: 1. Eine Liste der früheren Artikel am Anfang jedes Artikels veröffentlichen. Die Suche auf der Website nicht immer richtig zu regieren) 2. Machen Sie einige Summe des Wissens in Form eines Beispiels. Keine Notwendigkeit, es zu kauen, denke ich, wer Ihre Artikel liest - wird verstehen. Aber es wäre interessant, den Spaß Ergebnis auf einmal zu sehen. 3. Viel Glück, ich freue mich schon auf die Fortsetzung)
 
Alexey Volchanskiy:
Anatoly, eine exzellente Serie von Artikeln, und relevant. Könnten Sie bitte: 1. Veröffentlichen Sie eine Liste der früheren Artikel am Anfang jedes Artikels. Die Suche auf der Website nicht immer richtig zu regieren) 2. Machen Sie einige Summe des Wissens in Form eines Beispiels. Keine Notwendigkeit, es zu kauen, denke ich, wer Ihre Artikel liest - wird verstehen. Aber es wäre interessant, den Spaß Ergebnis auf einmal zu sehen. 3. Viel Glück, ich freue mich auf die Fortsetzung)

Vielen Dank!

Du kannst später einen separaten Artikel schreiben, in dem du als Beispiel eine Anwendung mit einer grafischen Oberfläche mit allen Bibliothekssteuerelementen erstellen wirst. Und schon in diesem Artikel machen Sie den vollen Inhalt mit Links zu allen Artikeln. Diese Option wird für diejenigen bequem sein, die nur die Bibliothek in ihren MQL-Anwendungen verwenden wollen, ohne in, wie es organisiert ist.

 
Anatoli Kazharski:

Danke.

Sie können einen separaten Artikel schreiben, in dem Sie eine GUI-Anwendung mit allen Steuerelementen der Bibliothek als Beispiel erstellen. Und bereits in diesem Artikel machen vollen Inhalt mit Links zu allen Artikeln.

+1
 
Rashid Umarov:
Geschäft. )
 
MetaQuotes Software Corp.:

Der neue Artikel Graphical Interfaces IV: Informational Interface Elements (Chapter 1) wurde veröffentlicht:

Autor: Anatoli Kazharski

Großartig! Danke Anatoli.
 

Hallo~ Ich habe die Vorlage geladen, die Sie zum Testen bereitgestellt haben, aber ich erhalte einen Fehler

Beschreibung: 'return'-kann nicht von const-Zeiger zu nonconst-Zeiger konvertieren

Datei:SplitButton.mqh

Was kann ich tun, um das zu beheben?

 

Tol, ich habe mir die letzten beiden Versionen nicht angesehen, aber vor ihnen gab es einen Fehler in CCtatusBar:

Wenn die Statusleiste m_status_bar.ValueToItem() im Timer aktualisiert wird, dann hängt die Statusleiste, wenn das Hauptfenster minimiert wird, die ganze Zeit im Chart - sie wird nicht minimiert. Ich muss in meinem CProgramm ständig auf diese Weise überwachen:

if(m_status_bar.IsDropdown()) { m_status_bar.ValueToItem(....); }

Um das zu beheben, müssen Sie CCtatusBar in der ValueToItem()-Methode eine solche Prüfung hinzufügen:

//+------------------------------------------------------------------+
//| Setzt den Wert am angegebenen Index.
//+------------------------------------------------------------------+
void CStatusBar::ValueToItem(const uint index,const string value)
  {
//--- Prüfung auf Bereichsüberschreitung
   uint array_size=::ArraySize(m_items);
   if(array_size<1 || m_wnd.IsMinimized())
      return;
//--- Indexwert anpassen, falls außerhalb des Bereichs
   uint correct_index=(index>=array_size)? array_size-1 : index;
//--- Einstellung des übertragenen Textes
   m_items[correct_index].Description(value);
  }
//+------------------------------------------------------------------+

Dann ist alles in Ordnung, und Sie müssen nicht ständig daran denken und es in Ihrem Programm kontrollieren.

 
Artyom Trishkin:

...

Wenn die Statusleiste m_status_bar.ValueToItem() im Timer aktualisiert wird, dann hängt die Statusleiste, wenn das Hauptfenster minimiert wird, die ganze Zeit im Chart - sie wird nicht minimiert.

...

Geprüft. Fast alle Testbeispiele aus den Artikeln haben eine Statusleiste mit einer Aktualisierung im Timer. Das beschriebene Verhalten wird nicht reproduziert.
 
Anatoli Kazharski:
Prüfen. Fast alle Testbeispiele aus den Artikeln haben eine Statuszeile mit einer Aktualisierung im Timer. Das beschriebene Verhalten wird nicht reproduziert.

Wissen Sie, ich wollte ein Video davon aufnehmen, wie es funktioniert, aber leider habe ich nach der Rückkehr zu Ihrer Version von ValueToItem() auch dieses Verhalten verloren. Aber es war da... Vielleicht weil der Markt jetzt geschlossen ist....

Ich werde es so belassen, wie ich es vorgeschlagen habe - damit ich nicht irgendwann wieder auf diesen Fehler stoße.

 

Ich versuche es mit 4.
Das Verhalten ist standardmäßig.
Bei dieser Gelegenheit möchte ich fragen:
wie können Icons in der Statusleiste verwendet werden?

Wie eine Verbindungsanzeige oder so...
)