Diskussion zum Artikel "Grafische Interfaces X: Elemente der Zeit, Listen von Kontrollkästchen und das Sortieren von Tabellen (build 6)" - Seite 3

 
Artyom Trishkin:

Ich meine auf der Website in dem Artikel - vielleicht wurde dort die alte zu den Updates hinzugefügt. Ich nehme die Datei aus dem letzten Update, heruntergeladen von der Website von der Unterseite des Artikels aus dem zip.

Hier, machte die Korrekturen, wie ich oben schrieb:

Sehr gut. Oder Sie können etwas dort genagelt haben, wie es viele Male passiert ist. ) Aber wenn etwas, werde ich im Hinterkopf behalten.
 
Anatoli Kazharski:
Oh, gut. Sonst könnte es sein, dass Sie dort etwas festgenagelt haben, wie es schon oft passiert ist. ) Aber ich werde es im Hinterkopf behalten.

Du zwingst mich, etwas Dummes zu tun.


Klein, aber man sieht es.

Und du könntest es einfach selbst laden und hineinschauen - das ist ganz einfach, vor allem, da man dir davon erzählt hat.

 
Artyom Trishkin:

Du zwingst mich, etwas Dummes zu tun.

Es ist klein, aber man kann es sehen.

Du hättest es selbst herunterladen und hineinschauen können, das ist einfach, vor allem, da du davon erfahren hast.

Ich habe dich nicht um einen Beweis gebeten. Ich habe nur gesagt, dass ich es im Hinterkopf behalten werde. Aber ich habe es noch nicht reproduziert. Ich werde es im Hinterkopf behalten.

Wenn es ein Problem gibt, funktioniert Ihre Lösung vielleicht nicht in allen Fällen. In Ihrem Fall funktioniert sie, aber Sie müssen alle Modi testen. Ich werde es selbst tun, wenn ich ein Problem finde.

Wirklich, machen Sie keinen Unsinn. )

 
Anatoli Kazharski:

Ich habe Sie nicht um einen Beweis gebeten. Ich habe nur gesagt, dass ich es im Hinterkopf behalten werde. Aber ich habe ihn noch nicht reproduziert. Ich werde es im Hinterkopf behalten.

Wenn es ein Problem gibt, funktioniert Ihre Lösung vielleicht nicht in allen Fällen. In Ihrem Fall funktioniert sie, aber Sie müssen alle Modi testen. Ich werde es selbst tun, wenn ich ein Problem finde.

Wirklich, machen Sie keinen Unsinn. )

Okay, werde ich nicht ;)

Tol, Frage: Tabellen werden nach Spalten sortiert - alles ist normal. Aber ..., wenn die Tabelle leere Zeilen hat, und davon gibt es viele, dann schließt die Sortierung auch diese leeren Zeilen ein. Es stellt sich heraus, dass, sagen wir mal, es gibt eine Tabelle mit tausend Zeilen (1001 - Null für die Kopfzeile) - entsprechend der maximalen Anzahl von Zeichen in der Marktübersicht. Im Moment gibt es aber nur 10 Zeichen in der Marktübersicht. Sie befinden sich alle in den ersten zehn Zeilen der Tabelle - von der ersten bis zur zehnten Zeile. Die restlichen Zeilen sind leer (Tabellen sind nicht dynamisch, und Symbole können der Tabelle hinzugefügt oder aus ihr entfernt werden). Wenn Sie versuchen, eine solche Tabelle zu sortieren, geht die sortierte Liste bis zum Ende der Tabelle - bis zu den Zeilen 990 - 1000 (Null - die Kopfzeile), und Sie können leere Zeilen am Anfang sehen. Das ist nicht gut und, wie ich finde, ein Versäumnis.

 
Artyom Trishkin:

... Tabellen sind nicht dynamisch, und Zeichen können der Tabelle hinzugefügt/entfernt werden ...

Sie werden bald dynamisch sein. Ich arbeite gerade daran.
 
Anatoli Kazharski:
Bald wird es dynamisch. Ich bin gerade mittendrin.
Das ist ja toll! Und das Problem mit der Aufnahme völlig leerer Zeilen in die sortierte Liste? Wie steht es damit?
 
Artyom Trishkin:
... Und das Problem mit der Aufnahme völlig leerer Zeilen in die sortierte Liste? Was ist damit?
Es bleibt vorerst so, wie es ist. Ich werde in nächster Zeit nicht zum Sortieren zurückkehren.
 
Anatoli Kazharski:
Das wird vorerst so bleiben. Ich werde in nächster Zeit nicht zum Sortieren zurückkehren.
Richtig. Nun, ich habe ein Sortiersystem für bestimmte Bedürfnisse. Und dann kannst du es eines Tages optimieren.
 
Anatoli Kazharski:
...

Das Gleiche gilt für die Trennlinie im Kontextmenü in ContextMenu.mqh - der Trennbalken zwischen den Menüpunkten liegt nicht auf seinen Koordinaten.

In der Methode:

//+------------------------------------------------------------------+
//| Erzeugt eine Trennungslinie|
//+------------------------------------------------------------------+
bool CContextMenu::CreateSeparateLine(const int line_number,const int x,const int y)
  {
//--- Speichern des Formularzeigers
   m_sep_line[line_number].WindowPointer(m_wnd);
//--- Eigenschaften einstellen
   m_sep_line[line_number].TypeSepLine(H_SEP_LINE);
   m_sep_line[line_number].DarkColor(m_sepline_dark_color);
   m_sep_line[line_number].LightColor(m_sepline_light_color);
   m_sep_line[line_number].AnchorRightWindowSide(m_anchor_right_window_side);
   m_sep_line[line_number].AnchorBottomWindowSide(m_anchor_bottom_window_side);
//--- Erstellen einer Trennungslinie
   if(!m_sep_line[line_number].CreateSeparateLine(m_chart_id,m_subwin,line_number,x,y,m_x_size-10,2))
      return(false);
//--- Speichern des Objektzeigers
   CElement::AddToArray(m_sep_line[line_number].Object(0));
   return(true);
  }
//+------------------------------------------------------------------+

ersetzte ich die hervorgehobene mit

//+------------------------------------------------------------------+
//| Erzeugt eine Trennungslinie|
//+------------------------------------------------------------------+
bool CContextMenu::CreateSeparateLine(const int line_number,const int x,const int y)
  {
//--- Speichern des Formularzeigers
   m_sep_line[line_number].WindowPointer(m_wnd);
//--- Eigenschaften einstellen
   m_sep_line[line_number].TypeSepLine(H_SEP_LINE);
   m_sep_line[line_number].DarkColor(m_sepline_dark_color);
   m_sep_line[line_number].LightColor(m_sepline_light_color);
   m_sep_line[line_number].AnchorRightWindowSide(m_anchor_right_window_side);
   m_sep_line[line_number].AnchorBottomWindowSide(m_anchor_bottom_window_side);
//--- Erstellen einer Trennungslinie
   if(!m_sep_line[line_number].CreateSeparateLine(m_chart_id,m_subwin,line_number,x-m_wnd.X(),y-m_wnd.Y(),m_x_size-10,2))
      return(false);
//--- Speichern des Objektzeigers
   CElement::AddToArray(m_sep_line[line_number].Object(0));
   return(true);
  }
//+------------------------------------------------------------------+

und der Trennbalken ist an seinem Platz.

 
Artyom Trishkin:

Dasselbe gilt für die Trennlinie im Kontextmenü in ContextMenu.mqh - die Trennlinie zwischen den Menüpunkten befindet sich nicht auf ihren Koordinaten.

Ich habe alle diese Fälle reproduziert. Dies gilt für alle Elemente, die als Komponenten in anderen Elementen verwendet werden. Es wird erkannt, wenn die anfänglichen absoluten Koordinaten des Formulars bei der Erstellung der GUI größer als (1,1) sind.

Der Fix wird in der nächsten Build enthalten sein. Als vorübergehende schnelle Lösung funktionieren entweder (1) Ihre Beispiele oder (2) die anfänglichen Koordinaten des Formulars auf (1,1) zu setzen. Die zweite Variante ist besser, da sie andere Modi der Elementpositionierung einbeziehen kann.