Diskussion zum Artikel "Grafische Interfaces X: Erweitertes Management von Listen und Tabellen Code Optimierung (build 7)" - Seite 8
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
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? :