Diskussion zum Artikel "Grafische Interfaces X: Erweitertes Management von Listen und Tabellen Code Optimierung (build 7)" - Seite 8

 
Anatoli Kazharski:
In Ordnung. (gluckst) Lassen Sie uns mit dem Beispiel fortfahren, mit dem wir hier begonnen haben. Vervollständigen Sie es bis zu dem Punkt, an dem sich das Problem zu manifestieren beginnt.

Nein, Tol, es ist dasselbe wie in deinem Beispiel - es hat sich nichts geändert. In Table.mqh habe ich es zur letzten Schleife hinzugefügt:

//--- Spalten
   for(uint c=l; c<m_visible_columns_total; c++)
     {
      //--- Ermitteln der aktuellen Position des Schiebereglers für die vertikale Bildlaufleiste
      v=m_scrollv.CurrentPos()+t;
      //--- Zeilen
      for(uint r=t; r<m_visible_rows_total; r++)
        {
         //--- Daten der Offset-Tabelle
         if(v>=t && v<m_rows_total && h>=l && h<m_columns_total)
           {
            //--- Anpassung für die hervorgehobene Zeile
            color back_color=(m_selected_item==v) ? m_selected_row_color : m_vcolumns[h].m_cell_color[v];
            color text_color=(m_selected_item==v) ? m_selected_row_text_color : m_vcolumns[h].m_text_color[v];
            //--- Anpassen von (1) Werten, (2) Hintergrundfarbe, (3) Textfarbe und (4) Textausrichtung in Zellen
            SetCellParameters(c,r,m_vcolumns[h].m_vrows[v],m_vcolumns[h].m_cell_color[v],m_vcolumns[h].m_text_color[v],m_vcolumns[h].m_text_align[v]);
            v++;
           }
        }
      //---
      h++;
     }

In Programme.mqh habe ich einen Timer hinzugefügt:

//+------------------------------------------------------------------+
//| Timer|
//+------------------------------------------------------------------+
void CProgram::OnTimerEvent(void)
  {
   CWndEvents::OnTimerEvent();
//--- Pause zwischen Elementaktualisierungen
   if(m_counter1.CheckTimeCounter())
     {
      //--- Aktualisieren des zweiten Elements der Statusleiste
      m_status_bar.ValueToItem(1,::TimeToString(::TimeLocal(),TIME_DATE|TIME_SECONDS));
      //--- Zeichnen Sie das Diagramm neu
      m_chart.Redraw();
     }
//--- Pause zwischen Elementaktualisierungen
   if(m_counter2.CheckTimeCounter())
     {
      //--- Geben Sie den Kurswert des aktuellen Symbols in das Feld Preis der ersten Zeile ein
      MqlTick tick;                                                    
      if(SymbolInfoTick(Symbol(),tick))                                
        {                                                              
         int dg=(int)SymbolInfoInteger(Symbol(),SYMBOL_DIGITS);        
         m_table.SetValue(1,1,DoubleToString(tick.bid,dg),dg);         
         m_table.UpdateTable();                                        
        }                                                              
      //--- Hinzufügen einer Zeile zur Tabelle, wenn die Gesamtzahl kleiner ist als die angegebene Zahl
      if(m_table.RowsTotal()<m_spin_edit1.GetValue())
         m_table.AddRow();
      //--- Hinzufügen einer Spalte zur Tabelle, wenn die Gesamtzahl der Spalten geringer ist als die angegebene Anzahl.
      if(m_table.ColumnsTotal()<m_spin_edit2.GetValue())
         m_table.AddColumn();
      //--- Fügen Sie der Liste ein Element hinzu, wenn die Gesamtzahl kleiner ist als die angegebene Zahl.
      if(m_listview.ItemsTotal()<m_spin_edit5.GetValue())
        {
         m_listview.AddItem("SYMBOL "+string(m_listview.ItemsTotal()));
         //--- Den Schieberegler der Bildlaufleiste an das Ende der Liste verschieben
         m_listview.Scrolling();
        }
      //--- Hinzufügen eines Eintrags aus den Kontrollkästchen zur Liste, wenn die Gesamtzahl kleiner ist als die angegebene Zahl
      if(m_checkbox_list.ItemsTotal()<m_spin_edit5.GetValue())
        {
         m_checkbox_list.AddItem("Checkbox "+string(m_checkbox_list.ItemsTotal()));
         //--- Den Schieberegler der Bildlaufleiste an das Ende der Liste verschieben
         m_checkbox_list.Scrolling();
        }
      //--- Zeichnen Sie das Diagramm neu
      m_chart.Redraw();
     }
  }
//+------------------------------------------------------------------+

Alles ist gleich wie vorher - keine Änderung - es blinkt.

Vielleicht haben Sie eine andere Version von Table.mqh und es funktioniert bereits mit solchen Änderungen?

 
Artyom Trishkin:

...

Vielleicht haben Sie bereits eine andere Version von Table.mqh und es funktioniert bereits mit diesen Änderungen?

Die Version ist die gleiche wie in dem Artikel mit dem Beispiel. Ich selbst sehe keine Probleme. Bei allem anderen kann ich Ihnen nicht helfen, da die Gründe nicht klar sind.
 
Anatoli Kazharski:
Die Version ist die gleiche wie in dem Artikel mit dem Beispiel. Ich selbst sehe keine Probleme. Bei allem anderen kann ich Ihnen nicht helfen, da die Gründe nicht klar sind.
Und Sie haben einen Timer in Betrieb, der Preis wird in der Tabelle mit jedem neuen Tick aktualisiert, aber die Tabelle verhält sich normal?
 
Artyom Trishkin:
Und der Timer funktioniert, der Preis wird in der Tabelle mit jedem neuen Tick aktualisiert, aber die Tabelle verhält sich normal?
Ja.
 
Anatoli Kazharski:
Ja.
Es ist wie ein Wunder. Ich habe das Gleiche auf allen Terminals. Und sogar auf MT4 ist es genau dasselbe - ohne sichtbare Änderungen....
 
Anatoli Kazharski:
Haben Sie die Bedienung der Maus geändert? Es hängt vom Zustand des Cursors ab - wenn Sie den Cursor bewegen, wird die markierte Zeile hervorgehoben, aber sie blinkt, wenn der Cursor an Ort und Stelle bleibt, ist keine Hervorhebung der Zeile sichtbar.
 
Artyom Trishkin:
Haben Sie die Bedienung der Maus geändert? Es hängt vom Zustand des Cursors ab - wenn Sie den Cursor bewegen, wird die hervorgehobene Zeile hervorgehoben, aber sie blinkt, wenn der Cursor an Ort und Stelle ist, dann ist keine Hervorhebung der Zeile sichtbar.
All das, was Sie beschreiben, hatte ich schon vor den von mir angegebenen Änderungen. Jetzt sehe ich keine Probleme mehr. Versuchen Sie, alle Bibliotheksdateien neu zu kompilieren und schauen Sie noch einmal nach.
 
Anatoli Kazharski:
Alles, was Sie beschreiben, hat bei mir vor den erwähnten Änderungen funktioniert. Jetzt sehe ich keine Probleme mehr. Versuchen Sie, alle Bibliotheksdateien neu zu kompilieren und schauen Sie noch einmal nach.
Das hat nicht geholfen.
 
Artyom Trishkin:
Es hat nicht geklappt.
Dann bleibt nur noch der Versuch, es selbst herauszufinden.
 
Artyom Trishkin:
Nicht hilfreich.

Achten Sie nicht nur auf das, was hervorgehoben wird, sondern auch darauf, wo es dann verwendet wird:

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Diskussion des Artikels "Graphical Interfaces X: Advanced List and Table Management. Code-Optimierung (Build 7)"

Anatoli Kazharski, 2017.01.24 12:26 Uhr.

Um zu verhindern, dass die hervorgehobene Zeile der Tabelle blinkt, fügen Sie in der Methode CTable::UpdateTable() in der letzten Schleife diese Zeilen hinzu:

//--- Spalten
   for(uint c=l; c<m_visible_columns_total; c++)
     {
      //--- Ermitteln der aktuellen Position des Schiebereglers für die vertikale Bildlaufleiste
      v=m_scrollv.CurrentPos()+t;
      //--- Zeilen
      for(uint r=t; r<m_visible_rows_total; r++)
        {
         //--- Daten der Offset-Tabelle
         if(v>=t && v<m_rows_total && h>=l && h<m_columns_total)
           {
            //--- Anpassung für die hervorgehobene Zeile
            color back_color=(m_selected_item==v) ? m_selected_row_color : m_vcolumns[h].m_cell_color[v];
            color text_color=(m_selected_item==v) ? m_selected_row_text_color : m_vcolumns[h].m_text_color[v];

            //--- Anpassen von (1) Werten, (2) Hintergrundfarbe, (3) Textfarbe und (4) Textausrichtung in Zellen
            SetCellParameters(c,r,m_vcolumns[h].m_vrows[v],back_color,text_color,m_vcolumns[h].m_text_align[v]);
            v++;
           }
        }
      //---
      h++;
     }

//---

Und für den Rest brauchen Sie mehr Details.

Was ist das? :

  1. pr.
  2. pr.
  3. pr...