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?
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?
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.
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++; }
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:
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?
...
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.
Und der Timer funktioniert, der Preis wird in der Tabelle mit jedem neuen Tick aktualisiert, aber die Tabelle verhält sich normal?
Ja.
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.
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.
Es hat nicht geklappt.
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:
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? :