Diskussion zum Artikel "Grafische Interfaces X: Updates für die Easy And Fast Bibliothek (Build 2)" - Seite 2
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
Vielleicht wurde mein Code gelöscht und ich kann es jetzt nicht mit Sicherheit sagen.
...
Grafische Schnittstellen I: Vorbereiten der Bibliotheksstruktur (Kapitel 1) >>>
Beachten Sie die doppelten Doppelpunkte vor den Funktionen im obigen Code-Listing. Eigentlich können Sie sie weglassen, und alles wird korrekt funktionieren. Aber in der Programmierung ist es eine gute Praxis, doppelte Doppelpunkte vor Systemfunktionen einer Sprache zu setzen. Das macht deutlich, dass es sich um eine Systemfunktion handelt.
Der Fehler tritt auf, wenn ich ein vom Indikator erstelltes Fenster mit einem Kreuz schließe. Ich habe die Datei MainWindow.mqh aus dem Beispiel, das sich hier befindet, leicht verändert: Indicators\Article 10\SeparateWindow.
Ich werde den Fehler durch zusätzliche Überprüfung ausschließen. Der Fix wird im nächsten Update enthalten sein. Replay fehlgeschlagen. Welche Änderungen wurden in der Datei MainWindow.mqh vorgenommen?
Und ich verstehe auch nicht, wie man eine Zeile in der erstellten Tabelle löschen kann?
Im Moment gibt es keine Möglichkeit. Es wird in den nächsten Versionen der Bibliothek sein. Es wird möglich sein, Zeilen in Tabellen und Listen hinzuzufügen und zu löschen.
Ich muss etwas Unnötiges gelöscht haben. Ich hänge die Dateien an.
p.s. Kann ich für jede Spalte in der Tabelle eine andere Breite einstellen?
Ich muss etwas Unnötiges gelöscht haben. Ich hänge die Dateien an.
p.s. Kann ich für jede Spalte in der Tabelle eine andere Breite einstellen?
Der Grund dafür ist, dass Sie ein Objekt derselben Tabelle zweimal zur Elementbasis hinzugefügt haben. Zuerst in der Tabellenerstellungsmethode CProgram::CreateTable(), wo dies geschehen sollte, und dann in Ihrer Methode CProgram::ModifyTable(). Löschen Sie die rot hervorgehobene Zeile in der nachstehenden Codeliste.
//---
Beim Löschen des Programms aus dem Diagramm oder beim erneuten Laden, z. B. beim Ändern des Zeitrahmens oder des Symbols, wurde ein zweiter Versuch unternommen, ein Element zu löschen, das bereits zuvor gelöscht worden war. Beim Löschen eines Tabellenobjekts wurden die Arrays freigegeben und es kam zu einem Fehler, wenn die Methode zum Löschen eines Elements erneut aufgerufen wurde.
p.s. Kann ich für jede Spalte in der Tabelle eine andere Breite einstellen?
Nicht in dieser Art von Tabellen(CTable). Sie können die Breite der Spalten nur in Tabellen vom Typ CCanvasTable einstellen. Aber in diesem Tabellentyp gibt es im Moment noch eine Menge anderer Einschränkungen, die Ihnen wahrscheinlich nicht passen werden. Die Möglichkeiten von Tabellen des Typs CCanvasTable werden noch erweitert.
Der Grund dafür war, dass Sie das gleiche Tabellenobjekt zweimal zur Elementbasis hinzugefügt haben. Zuerst in der Methode CProgram::CreateTable(), wo dies geschehen sollte, und dann in Ihrer Methode CProgram::ModifyTable(). Löschen Sie die rot hervorgehobene Zeile im untenstehenden Code-Listing.
Ah ja, das ist dumm, ich habe es nicht bemerkt, weil ich meine ModifyTable-Methode von CreateTable kopiert habe.
Ich werde es mit CCanvasTable versuchen, vielleicht klappt es ja.
Danke!
p.s.: Wenn ich keine Zeilen in der Tabelle löschen kann, kann ich die ganze Tabelle löschen und neu erstellen, die ich brauche. Ich habe auch keine Löschmethoden gefunden. Ich kann die Tabelle noch nicht löschen?
p.s2: Da ich die Tabellenspalten nicht mit unterschiedlichen Breiten erstellen kann, ist es logisch, zwei Tabellen nebeneinander zu platzieren, aber so wie ich es verstehe, kann ich das nicht tun, weil die Tabelle automatisch bis zum rechten Rand expandiert. Es gibt eine Methode AutoXResizeMode, aber sie funktioniert noch nicht... Wenn sie auf false gesetzt ist, treten keine Änderungen auf.
...
p.s.: Wenn ich keine Zeilen in einer Tabelle löschen kann, kann ich die gesamte Tabelle löschen und neu erstellen, die ich brauche. Ich habe auch keine Löschmethoden gefunden. Ich kann die Tabelle noch nicht löschen ?
Jetzt werden alle GUI-Elemente auf einmal erstellt und dann kann man ihre Sichtbarkeit mit Show() und Hide() Methoden kontrollieren.
Alexey Oreshkin:
p.s2: Da ich keine Tabellenspalten mit unterschiedlicher Breite erstellen kann, ist es logisch, zwei Tabellen nebeneinander zu platzieren, aber wie ich festgestellt habe, kann ich das nicht tun, weil die Tabelle automatisch bis zum rechten Rand expandiert. Es gibt eine Methode AutoXResizeMode, aber sie funktioniert noch nicht... Wenn sie auf false gesetzt ist, treten keine Änderungen auf.
Verwenden Sie die Methode XSize(), um die Breite der Tabelle festzulegen.
Beispiel:
m_table.XSize(300);Ich danke Ihnen für die Antworten.
Es gibt noch ein paar weitere Fragen:
1. wenn die Daten nicht in eine Tabellenzelle passen, ist geplant, in Zukunft entweder einen Tooltip oder eine Laufschrift in dieser Zelle einzubauen?
2. ist es möglich, das horizontale Scrollen in einigen Tabellen zu deaktivieren?
p.s:
Der Fehler tritt auf, wenn wir eine Tabelle mit 5 Spalten erstellen, aber versuchen, mehr anzuzeigen. Die Option ist albern, da stimme ich zu, aber sie ist notwendig. Vor allem, wenn Tabellen in Zukunft dynamisch werden können.
p.s2: Die Methoden zum Ein- und Ausblenden funktionieren einwandfrei und ermöglichen es, die Tabelle nicht spontan zu ändern, sondern nur die Tabelle anzuzeigen, die notwendig ist. Auf jeder Registerkarte habe ich notwendige Tabellen erstellt, die an Optionsfelder gebunden sind, und wenn sie aktiviert sind, wird die notwendige Tabelle angezeigt, die nicht benötigten werden ausgeblendet. Hier funktioniert alles. Aber aus irgendeinem Grund kann ich irrelevante Tabellen nicht sofort nach deren Erstellung ausblenden. Aus diesem Grund, denke ich, funktionieren die Bildlaufleisten nicht richtig, aber sobald man einmal auf die Optionsschaltfläche klickt und alles Unnötige ausgeblendet wird, beginnt alles zu funktionieren.
1. wenn die Daten nicht in eine Tabellenzelle passen, gibt es Pläne, entweder einen Tooltip oder einen Ticker in dieser Zelle in Zukunft zu machen?
Zur Liste der zukünftigen Updates hinzugefügt. Ich werde einen Modus für Tooltips in Tabellen erstellen.
2. ist es möglich, das horizontale Scrollen in einigen Tabellen zu deaktivieren?
Bildlaufleisten erscheinen, wenn der sichtbare Teil der Tabelle kleiner ist als der Gesamtteil.
Der Fehler tritt auf, wenn wir eine Tabelle mit 5 Spalten erstellen und versuchen, mehr anzuzeigen. Die Option ist dumm, da stimme ich zu, aber wir brauchen eine Kontrolle. Vor allem, wenn die Tabellen in Zukunft dynamisch werden können.
Ich habe Korrekturen vorgenommen. Sie werden mit dem nächsten Update verfügbar sein.
p.s2: Die Methoden zum Ein- und Ausblenden funktionieren einwandfrei und erlauben es, die Tabelle nicht spontan zu ändern, sondern die gewünschte Tabelle anzuzeigen. Auf jeder Registerkarte habe ich notwendige Tabellen erstellt, die an Optionsfelder gebunden sind, und wenn sie aktiviert sind, wird die notwendige Tabelle angezeigt, die anderen werden ausgeblendet. Hier funktioniert alles. Aber aus irgendeinem Grund kann ich irrelevante Tabellen nicht sofort nach deren Erstellung ausblenden. Aus diesem Grund, denke ich, funktionieren die Bildlaufleisten nicht richtig, aber sobald man einmal auf die Optionsschaltfläche klickt und alles Unnötige ausgeblendet wird, funktioniert alles einwandfrei.
Blenden Sie sie aus, nachdem die Registerkartenelemente aktualisiert wurden:
Wenn das nicht funktioniert, schicken Sie mir Ihren Code und ich schaue ihn mir an.
Beim Start funktionieren sie fast nicht, aber wenn ich sie mit Optionsfeldern aktualisiere, funktioniert alles normal. Beim Wechsel zu einer neuen Registerkarte tritt das gleiche Problem auf, bis ich auf die Optionsschaltfläche klicke.
Ich habe das Archiv per PM gesendet.
Ich scheine etwas falsch zu machen oder das Problem liegt auf eine andere Art und Weise, aber ich habe einige Probleme mit Bildlaufleisten.
Beim Start funktionieren sie fast nicht, aber wenn ich sie mit Optionsfeldern aktualisiere, beginnt alles normal zu funktionieren. Beim Wechsel zu einer neuen Registerkarte tritt das gleiche Problem auf, bis ich auf die Optionsschaltfläche klicke.
Ich habe das Archiv per PM gesendet.
Ich habe mir Ihre Dateien angeschaut. Das Problem ist klar. Es gibt einen Konflikt zwischen Bildlaufleisten, die in sichtbaren Tabellen übereinander angeordnet sind. Wenn Sie die Registerkarte wechseln, werden alle Elemente, die der aktuell ausgewählten Registerkarte zugeordnet sind, sichtbar. Da bei Ihnen alle Tabellen übereinander liegen, haben Sie sie nur nicht gesehen. Schauen Sie sich den Screenshot unten an, ich habe die Koordinaten von zwei Tabellen dieser Registerkarte der Übersichtlichkeit halber geändert:
//---
Wir brauchen ein Ereignis, das uns mitteilt, dass ein Tabulatorwechsel stattgefunden hat. Dann kann es in einem benutzerdefinierten Klassenhandler empfangen werden und die notwendigen Aktionen können durchgeführt werden. In Ihrem Fall könnten Sie den Index des ausgewählten Radio-Buttons abrufen und die Tabelle anzeigen, die Sie damit verbinden, und die anderen ausblenden.
Im Moment wird ein solches Ereignis beim Umschalten der Registerkarten nicht erzeugt. Es wird in der nächsten Aktualisierung der Bibliothek verfügbar sein.