Bibliotheken: Die Bibliothek EasyAndFastGUI zum Erstellen von grafischen Interfaces - 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
Das Kompilieren von ExampleEAF.mq5 hat den Zweck erfüllt.
Ich hatte angenommen, dass ich eine Bibliothek kompilieren muss, wenn ich eigene Dinge damit erstellen will.
Wie auch immer, vielen Dank!
Oh, und ich bin über diese Codezeile am Anfang der meisten Bibliotheksdateien gestolpert:
class CWindow;Ist die Erstellung einer "Fake-Klasse" ein Trick, um einen #include-Albtraum zu vermeiden? Wie kann der Compiler später tatsächlich die richtige Klasse linken, die wirklich verwendet wird?
Zuerst möchte ich das, was wir haben, abschließen... Immerhin gibt es noch eine Menge Unzulänglichkeiten.
Ich habe einige Anmerkungen zur Architektur. Die angegebenen Objekteigenschaften und das angezeigte Bild führen ein Eigenleben, unabhängig voneinander. Und ein obligatorischer Aufruf von Update() ist erforderlich, sonst bleiben sie in parallelen Realitäten. Das halte ich für falsch, wenn man bedenkt, dass wir ein ereignisbasiertes Modell haben.Manuelles Aktualisieren (Neuzeichnen) sollte keine Voraussetzung sein, es erlaubt nur, Änderungen sofort anzuzeigen, aber alle Änderungen sollten trotzdem angezeigt werden. Zu diesem Zweck sollte eine Nachricht (Ereignis) gesendet werden, um dieses Objekt neu zu zeichnen, die später verarbeitet wird.
D.h. etwa so:
Mit ChangeWindowWidth ändere ich die Breite des Fensters so, dass es über das aktuelle Diagramm hinausgeht. Wenn ich danach versuche, das Fenster zu verschieben, klebt es automatisch am linken Rand des Diagramms. Wie kann ich dies deaktivieren? Ich kann keine Stelle im Code finden.
Mit ChangeWindowWidth ändere ich die Breite des Fensters so, dass es über das aktuelle Diagramm hinausgeht. Wenn ich danach versuche, das Fenster zu verschieben, bleibt es automatisch am linken Rand des Diagramms hängen. Wie kann ich dies deaktivieren? Ich kann keine Stelle im Code finden.
Sie müssen die Methode CWindow::UpdateWindowXY() neu schreiben. Sie ist derzeit so implementiert, dass die Ränder des Fensters nicht über das Diagramm hinausgehen können, wenn das Fenster verschoben wird.
Übrigens, zur Änderung der Fensterbreite
m_window1.ChangeWindowWidth(NEW_WIDTH); m_window1.Update(true);In MT5 ist alles in Ordnung, aber in MT4 ist es so
Nach einem Klick auf die Kopfzeile verschieben sich die Schaltflächen an ihren richtigen Platz. Können Sie mir sagen, in welche Richtung ich schauen soll? Wo ist die Bewegung dieser Schaltflächen implementiert?
Übrigens, wenn Sie die Breite des Fensters ändern
In MT5 ist alles in Ordnung, aber in MT4 ist es so
Nach einem Klick auf die Kopfzeile bewegen sich die Schaltflächen an die richtige Stelle. Können Sie mir sagen, in welche Richtung ich schauen soll? Wo ist die Bewegung dieser Schaltflächen implementiert?
Sehen Sie sich die Methode Moving() an.
Versuchen Sie, über Zeiger auf die Fensterschaltflächen zuzugreifen und diese Methode aufzurufen.
Ja, Sie müssen entweder die Breite aller Spalten proportional erhöhen oder nur die der letzten Spalte, wobei letzteres vorzuziehen ist.
Aber in der aktuellen Version ist es problematisch, dies selbst zu implementieren, da ich in Ihrer Klasse keine Methode gefunden habe, um die aktuelle Spaltenbreite zu ermitteln, und alle Felder sind privat. Im Allgemeinen sollte zumindest diese Methode hinzugefügt werden.
So können Sie versuchen, das zu implementieren, was Sie jetzt brauchen:
Sehen Sie sich die Methode Moving() an.
Versuchen Sie, über Zeiger auf Fensterschaltflächen zuzugreifen und diese Methode aufzurufen.
Ja, das war's :) Danke!
Ich dachte, ich hätte schon alles durchgesehen und das Offensichtlichste übersehen :)
So können Sie versuchen, das zu realisieren, was Sie jetzt brauchen:
Es handelt sich nur um eine feste Spaltenbreite, aber wir sprachen davon, die Breite der Spalten dynamisch auf der Grundlage ihrer vorherigen Breite zu ändern. Allerdings habe ich die Klasse bereits vervollständigt, indem ich dort die Methode int ColumnWidth(int i) hinzugefügt habe
Guten Tag!
Das Problem ist größer :)
Wir erstellen ein dynamisches Objekt, zum Beispiel ein Etikett.
Aber wie löscht man es?
Ich lösche es auf diese Weise.
Aber nachdem ich es gelöscht habe, stürzt es ab und sagt, dass der Zugriff auf den Zeiger nicht korrekt ist.
Soweit ich verstanden habe, fügt CWndContainer::AddToElementsArray das Objekt zu den allgemeinen Arrays hinzu, aber Delete() löscht es nicht von dort, und das Fenster versucht, auf das Objekt zuzugreifen. Ich kann keine andere ähnliche Funktion wie Delete() finden.
Wie löscht man ein Objekt richtig?