Diskussion zum Artikel "Grafische Interfaces VIII: Das Datei-Navigator Control (Kapitel 3)" - 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
Anatoly, das ist meiner Meinung nach die beste Implementierung der gui Bibliothek in mql, die ich hier gesehen habe.
Ich bin jetzt auf der Suche, wie man "Bolzen" es zu meinem EA. Alles ist ausreichend, bis auf zwei Dinge:
1) es gibt keine Tabelle mit Steuerelementen innerhalb einzelner Zellen (Kontrollkästchen, Schaltflächen, ...).
2) Ich kann nicht "aufholen", wie man ein Fenster mit dynamischem Inhalt zu machen.
Für 1)-th ist es im Prinzip klar, dass man eine neue Klasse als Erweiterung von CTable machen muss. Aber bei 2) ist es ein Rätsel. Nehmen wir an, dass zu verschiedenen Zeitpunkten der Arbeit des Expert Advisors ein Dialogfenster geöffnet wird, in dem sich je nach den aktuellen Bedingungen eine unterschiedliche Anzahl von Checkboxen befinden kann. Wenn sich die Anzahl der Kontrollkästchen beim nächsten Öffnen des Fensters erhöht, ist klar, wie das geschieht. Aber wenn die Anzahl der Kontrollkästchen abnimmt - wie geht das? Wenn ich es richtig verstehe, ist es notwendig, einige der Steuerelemente, die dieses Fenster "abonniert" haben, zu "töten", aber in CWndContainer gibt es keine Methoden zum Zerstören von Elementen, nur Methoden zum Hinzufügen. Können Sie mir sagen, wie man das macht, wenn es in dieser Version der Bibliothek möglich ist?
Anatoly, das ist meiner Meinung nach die beste Implementierung der gui Bibliothek in mql, die ich hier gesehen habe.
Ich bin jetzt auf der Suche, wie man "Bolzen" es zu meinem EA. Alles ist ausreichend, bis auf zwei Dinge:
1) es gibt keine Tabelle mit Steuerelementen innerhalb einzelner Zellen (Kontrollkästchen, Schaltflächen, ...).
2) Ich kann nicht "aufholen", wie man ein Fenster mit dynamischem Inhalt zu machen.
Für 1)-th ist es im Prinzip klar, dass man eine neue Klasse als Erweiterung von CTable machen muss. Aber bei 2) ist es ein Rätsel. Nehmen wir an, dass zu verschiedenen Zeitpunkten der Arbeit des Expert Advisors ein Dialogfenster geöffnet wird, in dem sich je nach den aktuellen Bedingungen eine unterschiedliche Anzahl von Checkboxen befinden kann. Wenn sich die Anzahl der Kontrollkästchen beim nächsten Öffnen des Fensters erhöht, ist klar, wie das geschieht. Aber wenn die Anzahl der Kontrollkästchen abnimmt - wie geht das? Wenn ich es richtig verstehe, ist es notwendig, einige der Steuerelemente, die dieses Fenster "abonniert" haben, zu "töten", aber in CWndContainer gibt es keine Methoden zum Zerstören von Elementen, nur Methoden zum Hinzufügen. Können Sie mir sagen, wie man das macht, wenn es in dieser Version der Bibliothek möglich ist?
Vielen Dank für Ihre interessanten Vorschläge.
Ja, es gibt in dieser Version noch keine fertigen Lösungen. Ich sehe den Bedarf für solche Funktionen, also habe ich sie in den Plan für die Implementierung aufgenommen.
Zum zweiten Punkt. Wenn Sie eine dynamische Liste von Kontrollkästchen benötigen, ist es einfacher, eine weitere Klasse eines Elements wie CCheckboxList mit Methoden zum Hinzufügen und Entfernen von Elementen des Arrays (Liste) zu erstellen, nachdem das Element erstellt wurde. Übrigens planen wir auch, diese Funktion zu allen Arten von Listen und Tabellen hinzuzufügen.
Zum zweiten Punkt. Wenn Sie eine dynamische Liste von Kontrollkästchen benötigen, besteht eine einfachere Möglichkeit darin, eine weitere Klasse eines Elements vom Typ CCheckboxList mit Methoden zum Hinzufügen und Entfernen von Elementen des Arrays (der Liste) zu erstellen, nachdem das Element erstellt wurde. Es ist übrigens auch geplant, diese Funktion zu allen Arten von Listen und Tabellen hinzuzufügen.
Können wir mehrere Registerkarten mit verschiedenen Gruppen von Kontrollkästchen erstellen und die gewünschte Gruppe anzeigen?
Wenn die Gruppen vordefiniert sind, dann ist diese Option in Ordnung.
Es ist bereits möglich, Registerkarten zu erstellen: GUIs VII: Elemente "Registerkarten" (Kapitel 2) >>>
Wenn die Sets von Anfang an vordefiniert sind, ist diese Option in Ordnung.
Es ist bereits möglich, Tabs zu erstellen: GUIs VII: Tab-Elemente (Kapitel 2) >>>.
Das war ein Hinweis an den Fragesteller )
Nun, und eine kleine Frage - ist es möglich, eine Registerkarte programmatisch zu aktivieren.
...
Nun, und eine kleine Frage - ist es möglich, die Registerkarte programmgesteuert zu aktivieren.
In einer benutzerdefinierten Klasse bei der Erstellung einer Schnittstelle vor der Erstellung eines Elements:
//---
Ist das ausreichend? Oder ist es notwendig, in der Lage sein, Registerkarten programmatisch zu wechseln, nachdem das Element in den Prozess der Arbeit erstellt wird?
Es wäre wünschenswert, eine solche Funktion hinzuzufügen...
so etwas wie:
Ich werde es möglich machen, eine Registerkarte zu aktivieren, indem man ihren Index angibt, nachdem sie erstellt worden ist.
Es gibt in der Tat Fälle, in denen dies notwendig sein kann. Ich habe eine Reihe von Ideen, wie die Aktivierung einer Registerkarte automatisch erfolgen könnte. )
Wie lässt sich die Größe des Navigators an die Größe des Fensters anpassen, in dem der Navigator angezeigt wird?
Beispiel: Das Fenster ist 450 groß. Wie kann ich den Navigator so in das Fenster einpassen, dass rechts und links ein Einzug von 2 Pixeln entsteht?
Wie lässt sich die Größe des Navigators an die Größe des Fensters anpassen, in dem der Navigator angezeigt wird?
Beispiel: Das Fenster ist 450 groß. Wie kann ich den Navigator so in das Fenster einpassen, dass er rechts und links jeweils um 2 Pixel eingerückt ist?
Sie müssen die Methoden CFileNavigator::TreeViewAreaWidth() und CFileNavigator::ContentAreaWidth() verwenden, die die Breite für den Baumlistenbereich und den Inhaltsbereich angeben. Wenn Sie die Breite des Inhaltsbereichs nicht festlegen, wird der rechte Rand des Navigators automatisch am rechten Rand des Fensters ausgerichtet.