Diskussion zum Artikel "Grafische Interfaces IX: Die Fortschrittsanzeige und das Linienchart-Control (Kapitel 2)"

 

Neuer Artikel Grafische Interfaces IX: Die Fortschrittsanzeige und das Linienchart-Control (Kapitel 2) :

Das zweite Kapitel des neuen Teils dieser Serie widmet sich der Fortschrittsanzeige und dem Linienchart-Control Wie immer, gibt es auch hier detaillierte Beispiele, um deutlich zu machen, wie die Controls in den benutzerdefinierten MQL Anwendungen verwendet werden können.

Lassen Sie uns alle dafür notwendigen Komponenten auflisten:

  1. Hintergrund
  2. Beschreibung:
  3. Indikator Scrollbar
  4. Indikator Hintergrund
  5. Prozentangabe



Abbildung 1. Komponenten der Fortschrittsanzeige.


Autor: Anatoli Kazharski

 

Super!

Aus meiner Sicht sind Sie jetzt definitiv allen MQL-Grafikentwicklern voraus.

Ich habe für mich festgestellt, dass ich etwas habe, woran ich mich orientieren kann.

Das Ergebnis ist erstaunlich!

Viel Glück bei der weiteren Entwicklung.

 
Реter Konow:

Super!

Aus meiner Sicht sind Sie jetzt definitiv allen MQL-Grafikentwicklern voraus.

Ich habe für mich festgestellt, dass ich etwas habe, woran ich mich orientieren kann.

Das Ergebnis ist erstaunlich!

Viel Glück bei der weiteren Entwicklung.

Es gibt immer etwas, wonach man streben kann. )

Schauen Sie sich hier die Werke des Meisters an, die Sie noch mehr inspirieren werden: Yuri Kulikov >>>>

 
Anatoli Kazharski:

Es gibt immer etwas, das man anstreben kann. )

Hier ist ein Blick auf die Werke des Meisters, der Sie noch mehr inspirieren wird: Yuri Kulikov >>>.

Danke, wirklich beeindruckend!

Ich wollte dir eine Frage stellen...

Du hast dein Projekt mit OOP erstellt. Sie haben fast alle grundlegenden Steuerelemente implementiert. Sie haben eine umfangreiche Bibliothek erstellt...

Wie viel von dem Code haben Sie dabei bereits in Ihrer Arbeit verwendet?

Inwieweit haben Sie z. B. die Bibliothek der Steuerelemente in MT, Canvas usw... verwendet?

Ich persönlich musste alles von Grund auf neu entwickeln und auf einer völlig neuen Technologie aufbauen, bei der es unmöglich war, bereits ausgearbeitete Dinge zu verwenden.

In Zukunft wird die Entwicklung meines Projekts auch nicht von anderen Entwicklern fortgesetzt werden und sie werden nicht in der Lage sein, sich an der Entwicklung zu beteiligen, da die Technologie außer mir niemandem bekannt ist.

In Ihrem Fall ist es genau umgekehrt... Alle Programmierer können sich an der Verbesserung und Weiterentwicklung Ihrer Bibliothek beteiligen.

Und das einzige, was das verhindern kann, ist Faulheit.

 
Реter Konow:

Wie viel von dem Code haben Sie bereits bei Ihrer Arbeit verwendet?

Wie sehr haben Sie zum Beispiel die Bibliothek der Steuerelemente in MT, Canvas usw. verwendet?

Im ersten Artikel dieser Serie habe ich diese Frage beantwortet: GUIs I: Vorbereiten der Bibliotheksstruktur (Kapitel 1). Dort wird die Struktur der Standard-Bibliotheksklassen für die Arbeit mit grafischen Standard-Objekt-Primitiven gezeigt.

Die Liste der Klassen, die ich in meinem Projekt verwende, ist:

Idealerweise sollte es nur noch eine Klasse geben - CCanvas. Ein nützliches Thema zu diesem Thema ist hier: Doing a crowdsource project on Canvas >>>

Bevor ich mit der Entwicklung begann, studierte ich die Standardbibliothek zur Erstellung grafischer Oberflächen und die Version von Dmitry Fedoseev. Dann erstellte ich eine Liste der Dinge, die mir persönlich fehlen, und begann mit der Arbeit an dem Projekt. Die Liste der Dinge, die noch zu tun sind, ist immer noch recht umfangreich und wird ständig mit Vorschlägen von anderen interessierten Benutzern ergänzt. Es ist nur so, dass das alles hauptsächlich in persönlicher Korrespondenz geschieht. Wir arbeiten auch an den Bugs und Fehlern, die nach und nach bei der Verwendung der Bibliothek in unseren Projekten auftauchen.

Und das einzige, was dies verhindern kann, ist Faulheit.

Es gibt keine Probleme mit ihr. )

 
Anatoli Kazharski:

Im ersten Artikel dieser Reihe habe ich diese Frage beantwortet: Grafische Schnittstellen I: Vorbereiten der Bibliotheksstruktur (Kapitel 1). Dort wird die Struktur der Klassen einer Standardbibliothek für die Arbeit mit grafischen Standardprimitivobjekten gezeigt.

Die Liste der Klassen, die ich in meinem Projekt verwende, lautet:

Idealerweise sollte es nur noch eine Klasse geben - CCanvas. Nützliches Thema zu diesem Thema: Ein Crowdsource-Projekt auf Canvas durchführen >>>

Bevor ich mit der Entwicklung begann, studierte ich die Standardbibliothek zur Erstellung grafischer Oberflächen und die Version von Dmitry Fedoseev. Dann erstellte ich eine Liste der Dinge, die mir persönlich fehlen, und begann mit der Arbeit an dem Projekt. Die Liste der Dinge, die noch zu tun sind, ist immer noch recht umfangreich und wird ständig mit Vorschlägen von anderen interessierten Benutzern ergänzt. Es ist nur so, dass das alles hauptsächlich in persönlicher Korrespondenz geschieht. Ich arbeite auch an Bugs und Fehlern, die nach und nach bei der Verwendung der Bibliothek in meinen Projekten auftauchen.

Damit gibt es keine Probleme. )

Vielen Dank für die ausführliche Antwort. )

Ich wünsche Ihnen weiterhin eine produktive Arbeit.

 

Anatoly, entschuldigen Sie, dass ich aufdringlich bin, aber ich würde gerne wissen, wie es möglich ist, den Fortschrittsbalken innerhalb einer Schleife mit umfangreichen Berechnungen zu aktualisieren.

Zum Beispiel, wir haben einen Fortschrittsbalken m_progress_bar, wir haben eine Schleife innerhalb von CProgram

   m_progress_bar.Show();  // ist sinnlos, da es bereits sofort sichtbar ist, wenn das Fenster (m_window.Show()), an das es gebunden ist, angezeigt wird,
                           // und ich möchte sie in einem verborgenen Zustand erstellen und sie einblenden, wenn sie benötigt wird
   int total=1000;         // eine bestimmte Anzahl von Schleifenwiederholungen, die Sie mit dem Fortschrittsbalken anzeigen möchten 
   for(int i=0;i<total;i++)
     {
      Func();  // Funktion mit umfangreichen Berechnungen bei jeder Iteration der Schleife
      m_progress_bar.Update(i,total);  // bewirkt nichts: Der Fortschrittsbalken befindet sich im Ausgangszustand "gehängt".
     }
   //--- der Fortschrittsbalken sollte ausgeblendet werden, wenn der Zyklus abgeschlossen ist, 
   //--- und in dieser Situation wird es während der Schleife nicht aktualisiert und dann durch Überlagerung mit einem anderen Objekt ausgeblendet 
   m_progress_bar.Hide();  // blendet den Fortschrittsbalken aus irgendeinem Grund nicht aus, ich muss ihn unter einem anderen grafischen Objekt ausblenden.

Könnten Sie mir an einem so "abstrakten" Beispiel erklären, was ich nicht verstehe?

 
Es würde nicht schaden, einige Daten zu übergeben.... Artem, es ist nur ein Datentyp, und der Wert sollte zugewiesen werden.
 
Алексей Тарабанов:
Es würde nicht schaden, einige Daten weiterzugeben.

Wie wäre es damit?

m_progress_bar.Update(i,total);
 
Artyom Trishkin:

Wie wäre es damit?

Es funktioniert nicht.
 
Алексей Тарабанов:
Es funktioniert nicht.

Warum nicht?

//+------------------------------------------------------------------+
//|| Aktualisiert den Fortschrittsbalken|
//+------------------------------------------------------------------+
void CProgressBar::Update(const int index,const int total)
  {
//--- Neuen Index setzen
   CurrentIndex(index);
//--- Neuen Bereich festlegen
   StepsTotal(total);
//--- Berechnen der Breite des Indikators
   double new_width=(m_current_index/m_steps_total)*m_bar_bg.XSize();
//--- Anpassen, wenn weniger als 1
   if((int)new_width<1)
      new_width=1;
   else
     {
      //--- Anpassung an die Breite des Rahmens
      int x_size=m_bar_bg.XSize()-(m_bar_border_width*2);
      //--- Korrigieren, wenn außerhalb der Grenzen
      if((int)new_width>=x_size)
         new_width=x_size;
     }
//--- Eine neue Breite für den Indikator festlegen
   m_indicator.X_Size((int)new_width);
//--- Berechnen Sie den Prozentsatz und bilden Sie eine Zeichenkette
   double percent =m_current_index/m_steps_total*100;
   string desc    =::DoubleToString((percent>100)? 100 : percent,m_digits)+"%";
//--- Den neuen Wert einstellen
   m_percent.Description(desc);
  }
//+------------------------------------------------------------------+