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

 

Anatol, können Sie mir sagen, ob es möglich ist, die Prozessbeschreibung in der Fortschrittsleiste dynamisch zu ändern?

Angenommen, wir haben ein Array mit Symbolnamen. Wir durchlaufen dieses Array in einer Schleife und erhalten die Zeichennamen. Dann wird jedes Symbol durch das Programm verarbeitet, um Daten daraus zu erhalten. Der gesamte Zyklus wird in einem Fortschrittsbalken angezeigt, aber ich möchte den Prozess der Verarbeitung jedes einzelnen Symbols anzeigen. Dementsprechend schreibe ich den Namen des Prozesses "Verarbeitung CMG", dann, bei der Verarbeitung des nächsten, bereits einen anderen Namen des Prozesses: "Verarbeitung EQIX", usw.

Es ist nicht im Voraus bekannt, welche Symbole in dem Array sein können - d.h. es wird nicht möglich sein, einen Haufen von Fortschrittsbalken vorzubereiten, und es ist nicht optimal mit mehr als tausend Namen von verschiedenen Symbolen....

 
Artyom Trishkin:

Anatol, können Sie mir sagen, ob es möglich ist, die Prozessbeschreibung in der Fortschrittsleiste dynamisch zu ändern?

Angenommen, wir haben ein Array mit Symbolnamen. Wir durchlaufen dieses Array in einer Schleife und erhalten die Zeichennamen. Dann wird jedes Symbol durch das Programm verarbeitet, um Daten daraus zu erhalten. Der gesamte Zyklus wird in einem Fortschrittsbalken angezeigt, aber ich möchte den Prozess der Verarbeitung jedes einzelnen Symbols anzeigen. Dementsprechend schreibe ich den Namen des Prozesses "Verarbeitung CMG", dann, bei der Verarbeitung des nächsten, bereits einen anderen Namen des Prozesses: "Verarbeitung EQIX", usw.

Man weiß im Voraus nicht, welche Symbole sich in dem Array befinden könnten - d.h. man kann nicht eine Reihe von Fortschrittsbalken vorbereiten, und bei mehr als tausend Namen verschiedener Symbole ist das nicht optimal....

Derzeit gibt es keine solche Methode. In der nächsten Aktualisierung werde ich diese Funktion für jedes Element hinzufügen, das eine Textbeschreibung hat. Das heißt, es wird möglich sein, den Text zu ändern, nachdem das Element erstellt wurde.
 
Anatoli Kazharski:
Momentan gibt es keine solche Methode. In der nächsten Aktualisierung werde ich diese Funktion für jedes Element hinzufügen, das eine Textbeschreibung hat. Das heißt, es wird möglich sein, den Text zu ändern, nachdem das Element erstellt wurde.

Danke, ich freue mich schon darauf ;)

Frage: In Ihren Beispielen haben Sie diesen Code für die Erstellung eines Fortschrittsbalkens:

//+------------------------------------------------------------------+
//| Erzeugt einen Fortschrittsbalken|
//+------------------------------------------------------------------+
bool CProgram::CreateProgressBar(const int x_gap,const int y_gap)
  {
//--- Speichern des Zeigers auf das Formular
   m_progress_bar.WindowPointer(m_window);
//--- Koordinaten
   int x=m_window.X()+x_gap;
   int y=m_window.Y()+y_gap;
//--- Eigenschaften vor der Erstellung festlegen
   m_progress_bar.YSize(15);
   m_progress_bar.BarYSize(11);
   m_progress_bar.BarXOffset(65);
   m_progress_bar.BarYOffset(2);
   m_progress_bar.BarBorderWidth(1);
   m_progress_bar.LabelText("Processing:");
   m_progress_bar.AreaColor(C'225,225,225');
   m_progress_bar.BarAreaColor(clrWhiteSmoke);
   m_progress_bar.BarBorderColor(clrWhiteSmoke);
   m_progress_bar.IsDropdown(true);
   m_progress_bar.AutoXResizeMode(true);
   m_progress_bar.AutoXResizeRightOffset(230);
//--- Erstellen eines Elements
   if(!m_progress_bar.CreateProgressBar(m_chart_id,m_subwin,x,y))
      return(false);
//--- Element ausblenden
   m_progress_bar.Hide();
//--- Hinzufügen eines Zeigers auf das Element in der Basis
   CWndContainer::AddToElementsArray(0,m_progress_bar);
   return(true);
  }
//+------------------------------------------------------------------+

Wofür ist das Attribut des Dropdown-Elements?

m_progress_bar.IsDropdown(true);

???

 
Artyom Trishkin:

Frage: Sie haben diesen Code für die Erstellung eines Fortschrittsbalkens in Ihren Beispielen:

Was ist der Zweck der Dropdown-Element-Eigenschaft:

???

Um zu vermeiden, dass der Fortschrittsbalken angezeigt wird, wenn das Formular aufgeklappt ist, obwohl er nicht sichtbar sein sollte.
 
Anatoli Kazharski:
Um zu vermeiden, dass der Fortschrittsbalken angezeigt wird, wenn das Formular erweitert wird, obwohl er nicht sichtbar sein sollte.
Gilt dies für alle Objekte, die mit Ihrer Bibliothek erstellt werden können?
 
Artyom Trishkin:
Gilt dies für alle Objekte, die mit Ihrer Bibliothek erstellt werden können?
Ja. Die Methode IsDropdown() befindet sich in der Basisklasse CElement und ist für alle GUI-Elemente verfügbar.
 

Die dynamische Änderung der Eigenschaften des Fortschrittsbalkens funktioniert nicht.

Ich wollte zum Beispiel die Farbe ändern:

   void              IndicatorColor(const color clr)    { m_indicator_color=clr;           }

Null-Antwort. Offenbar muss in der Update-Methode neben der Änderung der Index- und Gesamtwerte auch die andere m_indicator_color usw. geschrieben werden. Ansonsten werden diese Methoden nirgendwo angewandt, außer bei der Erstellung. Oder war das so beabsichtigt?

 
Alexander Fedosov:

... Ansonsten sind diese Methoden nur bei der Erstellung anwendbar. Oder war das so beabsichtigt?

Ja, dies ist eine vorläufige Version. Bald (in den nächsten Artikeln) wird es massive Updates für alle Steuerelemente geben, bei denen Sie jede Eigenschaft zur Laufzeit ändern können.
 
Anatoli Kazharski:
Ja, dies ist eine vorläufige Version. Bald (in den nächsten Artikeln) wird es massive Updates für alle Steuerelemente geben, bei denen Sie jede Eigenschaft zur Laufzeit ändern können.

Ich bin gespannt. In der Zwischenzeit habe ich eine temporäre Lösung gefunden:

//+------------------------------------------------------------------+
//|| 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);
   
   m_indicator.BackColor(m_indicator_color);
   m_indicator.Color(m_indicator_color);
  }
 
172218684:
Sie alle zu diesem Gold Kampf schreien einzigen Gruppe 172218684 172218684 , wird auch weiterhin Gewinne zu verdienen, nur hier schreien Verification - Stärke ist unbezahlbar!

Lügner