Diskussion zum Artikel "Graphische Interfaces III: Einfache und multifunktionale Buttons (Chapter 1)"
Aus meiner persönlichen Erfahrung heraus kann ich sagen, dass es keine leichte Aufgabe ist, Fenster "gummiartig" (d.h. dynamisch) zu machen. Wenn wir über eine einfache Form eines Fensters ohne Objekte sprechen, ist es definitiv einfacher, es dehnbar zu machen, aber hier braucht man ein ganzes Konzept der Interaktion zwischen dem Benutzer und dem Fenster. Ein Standard-Windows-Fenster hat mindestens 8 Griffe, mit denen man die Größe des Fensters bequem in jede Richtung verändern kann.
Aus meiner Erfahrung weiß ich, wie man das umsetzen kann, und etwas Ähnliches wurde bereits in einem der zur Veröffentlichung geplanten Steuerelemente implementiert. Ein Beispiel wird in einem der nächsten Artikel dieser Serie zu finden sein.
Nehmen Sie zum Beispiel das"Alert"-Fenster. Es ist nicht einfach, ein solches Fensterverhalten zu implementieren.
Was ist Ihrer Meinung nach so schwierig? Dieses Fenster hat nur eine Tabelle mit drei Spalten und eine Schaltfläche "Schließen". Wenn Sie die Größe des Fensters horizontal ändern, ändert sich die Breite der Spalten proportional zur aktuellen Fensterbreite. Ich halte es für besser, die Breite der Spalten zu fixieren. Und wenn die Breite des Fensters geändert wird, sollte eine horizontale Bildlaufleiste eingeblendet werden. Auf jeden Fall liegt all dies in der Klasse eines bestimmten Schnittstellenelements und nichts hindert Sie daran, ein solches Element zu erstellen und es einfach mit der Bibliotheks-Engine zu verbinden.
Im 18. Artikel der Serie werden drei Klassen von Tabellen mit horizontalen und vertikalen Bildlaufleisten veröffentlicht. In der aktuellen Implementierung sind sie nicht "gummiartig", aber wenn Sie es wirklich brauchen, werde ich eine solche Funktion in der zweiten Version der Bibliothek später machen.
Kehren wir nun zu einem normalen Fenster zurück, das eine große Anzahl verschiedener Arten von Objekten enthält. Sie werden feststellen, dass die Objekte in verschiedenen Beziehungen zueinander stehen. Das heißt, wenn Sie die Größe des Fensters ändern, ändern sich ihre Positionen (oder Größen) unterschiedlich. Einige Bilder verschieben sich zum Beispiel hinter den Stift, während andere an ihrem Platz bleiben. Einige Eingabefelder ändern ihre Länge, andere hingegen behalten die gleiche Größe. Zu sagen, dass diese Aufgabe eine der am leichtesten zu lösenden ist, halte ich daher für etwas voreilig.)
Sie wird gelöst, indem man den Klassen Methoden hinzufügt, mit deren Hilfe man Elemente positionieren und ihre Größe im Verhältnis zur Fenstergröße ändern kann. Im Moment sind das alles noch kleinere Aufgaben, die nach der Veröffentlichung der ersten Version der Bibliothek gelöst werden können.
Ich werde meine Meinung darlegen:
1. Die Schnittstelle standardisiert die Formen von Fenstern und Objekten sowie ihr Verhalten bei verschiedenen Ereignissen (Reaktionen auf Benutzeraktionen).
Es gibt eine Standardmethode zur Verknüpfung eines grafischen Objekts mit seinem Parameter und mit einer Funktion, eine klare Klassifizierung von Fenstern, Objekten und Ereignissen. Diese
Standardisierung fehlt bei den Panels völlig.
2- Die Schnittstelle verfügt über eine unermesslich große Anzahl von Möglichkeiten der Benutzerinteraktion mit der Anwendung. Sie erlaubt es dem Benutzer, ihr Aussehen leicht zu verändern,
indem er die von ihm gewünschte Größe oder Farbe annimmt. Sie "passt" sich sozusagen an die Anforderungen des Benutzers an.
3. Aufgrund ihrer grafischen Vorteile ermöglicht die Schnittstelle die Anzeige einer viel größeren Menge an Informationen in Fenstern als in Panels.
Den ersten Schritt auf dem Weg zur Erstellung einer Schnittstelle haben Sie zweifelsohne getan. In Ihrer Bibliothek standardisieren Sie die Parameter von Fenstern und Steuerelementen, überlassen es aber anderen, bestimmte Eigenschaften in vernünftigen Grenzen zu überschreiben. Der nächste Schritt besteht darin, die Möglichkeiten der Benutzerinteraktion mit der Schnittstelle zu erweitern. Und hier gibt es eine Menge Probleme (wie z.B. die Änderung von Fenstergrößen), ohne deren Lösung Ihre Bibliothek Gefahr läuft, nur eine Form der Standardisierung von Panels für die neue Generation von Entwicklern zu bleiben. Nun, und der letzte Schritt auf dem Weg zur Schnittstelle - die Schaffung von Methoden der Interaktion von Fenstern mit Informationen, die von der Anwendung verarbeitet werden, aber in viel größerem Umfang als es durch Panels geschehen kann.
Ich werde froh sein, um Einwände zu hören. :)
Реter Konow:
1. Die Schwierigkeit besteht nicht darin, ein bestimmtes Fenster und sein Verhalten zu kopieren, sondern ein System zu schaffen, das Fenster so verwaltet, dass man jede Art von Verknüpfungen zwischen Objekten und Fensterhandles implementieren kann.
(2) Dies wird Ihnen sehr große Möglichkeiten bieten, aber wieder einmal wird OOP Ihnen nicht erlauben, es effektiv zu implementieren.
3. Sie werden zu viel Code schreiben müssen.
4. Ich wette, wenn ich meine Ergebnisse mit Ihren vergleiche, wird der Vorteil nicht auf Ihrer Seite sein).
1. Ich verstehe nicht, von welcher Implementierung wir hier sprechen? Sie haben bereits und werden noch weitere Gelegenheiten haben, wenn die restlichen Artikel der Reihe veröffentlicht werden, einen umfassenden Vergleich mit Ihren Entwicklungen anzustellen. Und womit soll ich sie vergleichen? ))
2) OOP gibt Ihnen die Möglichkeit, all dies effektiv zu verwalten. Oder begründen Sie Ihren Gedanken ausführlicher, warum Sie so denken. Vorzugsweise an konkreten Beispielen mit kurzem Code, der dieses oder jenes Problem zeigt.
3. ich habe keine Angst vor der Komplexität dieser oder jener Aufgabe und es spielt keine Rolle, wie viel Code ich dafür schreiben muss.
4. Ich verstehe nicht, von welchem Vorteil Sie sprechen? Ich hatte nicht vor, mir einen Vorteil gegenüber Ihnen zu verschaffen. ))
Retag Konow:
Ich möchte jedoch eine Frage zu dem Unterschied zwischen den von vielen Entwicklern auf dem Markt angebotenen Panels und der Schnittstelle stellen. Warum werden sie, obwohl sie der klassischen Schnittstelle ähneln (wenn auch nicht alle), nicht als vollwertige Schnittstelle wahrgenommen? Wie unterscheiden sie sich von dieser? Warum reicht die äußere Ähnlichkeit der Fenster und Steuerelemente mit denen der regulären Oberfläche nicht aus? Ab wann kann ein Panel als Schnittstelle "erkannt" werden?Ich werde meine Meinung dazu äußern:
...
Sie haben zweifellos den ersten Schritt auf dem Weg zur Erstellung einer Schnittstelle gemacht. In Ihrer Bibliothek standardisieren Sie die Parameter von Fenstern und Steuerelementen, lassen aber anderen die Möglichkeit, bestimmte Eigenschaften in vernünftigen Grenzen zu überschreiben. Der nächste Schritt besteht darin, die Möglichkeiten der Benutzerinteraktion mit der Schnittstelle zu erweitern. Und hier gibt es eine Menge Aufgaben (wie die Größenänderung von Fenstern), ohne die Ihre Bibliothek Gefahr läuft, nur eine Form der Standardisierung von Panels für die neue Generation von Entwicklern zu bleiben.
Was den ersten und zweiten Schritt betrifft, so sollten Sie warten, bis alle Artikel der Reihe veröffentlicht sind. Im Moment sind erst 10 Artikel veröffentlicht worden. Insgesamt werden es >25 sein.
Retag Konow:
Nun, der letzte Schritt auf dem Weg zur Schnittstelle besteht darin, Methoden für Fenster zu entwickeln, um mit den von der Anwendung verarbeiteten Informationen zu interagieren, allerdings in einem viel größeren Umfang als Panels realisieren können.
Wenn ich Sie richtig verstehe, habe ich bereits solche Beispiele. Das könnten z.B. Tabellenklassen sein, um große Datenmengen zu speichern, abzurufen und darzustellen.
Nehmen wir an, Sie haben ein Fenster erstellt, in dem Sie eine Tabelle platziert haben. Die Tabelle war jedoch zu groß (z. B. eine Tabelle mit statistischen Indikatoren für die Handelsgeschichte). Sie haben eine vertikale Bildlaufleiste in Ihr Fenster eingefügt (oder sie erscheint automatisch). Aber das ist nicht genug. Sie möchten, dass der Benutzer die Größe des Fensters so verändern kann, dass er nur den Teil der Tabelle sehen kann, den er braucht. Wenn er den Bildlauf benutzt, sieht er immer noch mehr als nötig. Fazit - Sie müssen die Größe des Fensters ändern. Passen Sie sein Sichtfeld an die Größe des wichtigen Bereichs an.
Was den Vorteil angeht, so ist das nur ein Scherz. :D
Lassen Sie mich versuchen, die Aufgabe, Objekt- und Fensterzuordnungen zu erstellen, klarer zu formulieren.
Nehmen wir an, Sie haben ein Fenster erstellt, in dem Sie eine Tabelle platziert haben. Die Tabelle war jedoch zu groß (z. B. eine Tabelle mit statistischen Indikatoren für die Handelsgeschichte). Sie haben eine vertikale Bildlaufleiste in Ihr Fenster eingefügt (oder sie erscheint automatisch). Aber das ist nicht genug. Sie möchten, dass der Benutzer die Größe des Fensters so verändern kann, dass er nur den Teil der Tabelle sehen kann, den er benötigt. Wenn er den Bildlauf benutzt, sieht er immer noch mehr als nötig. Fazit - Sie müssen die Größe des Fensters ändern. Passen Sie sein Sichtfeld an die Größe des wichtigen Bereichs an.
Stellen wir uns nun vor, dass das Fenster neben der Tabelle verschiedene wichtige statische Objekte enthält (z. B. das Hilfesymbol oder das Einstellungssymbol oder die Zoom-Schaltflächen des Fensters...). Wenn Sie die Größe des Fensters ändern (wenn Sie den rechten Griff des Fensters bewegen, um es zu verkleinern), müssen diese Objekte außerhalb des Fensters liegen, es sei denn, sie bewegen sich in die richtige Richtung. Wenn Sie jedoch den linken Griff des Fensters bewegen, bleiben diese Objekte stationär. Sie können sagen, dass Sie bestimmte Objekte an den rechten Griff des Fensters gebunden haben, und sie werden sich nur mit diesem bewegen.
Einige Objekte können jedoch an mehrere andere Objekte gleichzeitig und an alle unterschiedlich gebunden sein. Sie sind es zum Beispiel leid, für jedes Objekt einzeln Koordinaten zu berechnen und festzulegen. Sie möchten es einfach an ein anderes Objekt binden, das bereits oben, unten, links oder rechts festgelegt ist. Sie erstellen eine Bindung zwischen einem Objekt und einem anderen, und wenn sich das erste Objekt bewegt, bewegt sich das zweite nach.
All dies sind recht einfache Aufgaben. Ich sehe darin keine Probleme. Das heißt, es wäre möglich, solche Funktionen in jeder Phase der Projektentwicklung hinzuzufügen.
Retag Konow:
Leider ist es sinnlos, Codestücke zu zeigen, da die Kommentare dazu die Größe dieses Codes um ein Vielfaches übersteigen würden. Sie sind einfach nicht mit meiner Programmiermethode vertraut und mein Code wird Ihnen nichts erklären, sondern Sie eher in eine Sackgasse führen. Ich kann nur sagen, dass alles, worüber ich schreibe, implementiert ist und perfekt funktioniert. Ich werde bald weitere Screenshots und Videos veröffentlichen.
Es wird also keine Beispiele geben, die erklären, warum OOP Ihre Programmierfähigkeiten einschränkt? Sie können einfach ein Schema zeichnen, dass es unmöglich ist, ein solches Projekt mit OOP umzusetzen, aber mit Ihren Methoden ist es möglich. Das reicht schon aus.
Und was sollen wir mit Ihren Bildschirmfotos und Videos machen? Mit den MQL-Funktionen können Sie grafische Schnittstellen beliebiger Komplexität implementieren. Als Beispiel dafür, was eine grafische Schnittstelle sein kann, sollten Sie sich besser auf grafische Schnittstellen von Betriebssystemen konzentrieren. Das heißt, etwas, das mit ausreichender Qualität erstellt wurde (Fehler und Mängel treten auch bei Windows auf) und das Sie selbst testen können, nicht nur auf Video.
Wenn Sie vorhaben, Ihre Bibliothek zu verkaufen, dann stellen Sie wenigstens Ihre kostenlosen DEMO-Beispiele in den Markt, damit wir sie testen und Schlussfolgerungen ziehen können. Und schreiben Sie auch einen Artikel, in dem wir verstehen können, wie wir Ihre Bibliothek verwenden können, um GUIs in unseren MQL-Anwendungen zu erstellen. Nur Screenshots und Videos sind bei weitem nicht genug für eine Bewertung. ;)
Meine Screenshots und Videos sind nur ein Beweis für meine Worte über die Lösung des oben erwähnten Problems. Ich wollte sie Ihnen zur Verfügung stellen.
Die Wahrheit ist im Moment, dass meine (nicht Ihre) Artikel mit einer detaillierten Beschreibung der Bibliothek veröffentlicht werden, die in der Tat der gesamten MQL-Gemeinschaft kostenlos zur Verfügung gestellt wird. Im Gegensatz zu Ihnen ist dies der Beweis in der Praxis.
Aber Sie wollen nur ein paar Bilder und Videos zeigen, also haben Sie eine Unterhaltung über nichts begonnen, während Sie ein anderes Argument erfinden. Wenn Sie den Code veröffentlichen, werden wir fortfahren. In der Zwischenzeit werde ich weiter an den anderen Artikeln dieser Serie arbeiten, damit Sie später einen umfassenderen Vergleich anstellen können.
Es liegen noch mindestens 15 weitere Artikel vor uns. Es ist also noch zu früh, um mit dem Vergleich zu beginnen.
Hinweis: Ich sehe die geringe Größe des Programms als Vorteil.
Nicht lustig. Wahrscheinlich so viele Funktionen wie Code. Wenn man alle Kommentare entfernen oder sogar verschleiern könnte, wäre es noch kleiner.
Die Wahrheit ist, dass meine (nicht Ihre) Artikel mit einer detaillierten Beschreibung der Bibliothek veröffentlicht werden, die der gesamten MQL-Gemeinschaft kostenlos zur Verfügung gestellt wird. Im Gegensatz zu Ihnen, ist dies der Beweis in der Praxis.
Ich wollte nichts schreiben... aber
- Anatoly, es ist irgendwie nicht sehr bescheiden dort über "Wahrheit" und "Beweis".
- Erinnern Sie sich an den Dialog: "... wie schwer es ist, Ihre Artikel zu lesen...", die Antwort des Autors: "und wissen Sie, wie schwer es ist, sie zu schreiben?". Anatoly, ich danke Ihnen für Ihre Arbeit, aber ich habe eine Frage: für wen veröffentlichen Sie "unentgeltlich" Artikel? Für Fortgeschrittene ist das nicht interessant, und für Anfänger ist es unverständlich. Es gibt eine Menge Code, in dem Sie das Geschriebene überhaupt nicht herausgreifen und systematisieren wollen.
- Anatoly, Ihr Leser stellt Fragen zu Ihrem Artikel und offenbar sind Sie damit nicht zufrieden. Und außerdem interessiert dich seine Meinung überhaupt nicht und irritiert dich sogar. Warum schreibst du dann Artikel?
- Autorinnen und Autoren brauchen Kritik, um sich zu verbessern.
Bei allem Respekt vor Ihnen, seien Sie näher an Ihren Lesern und regen Sie sich nicht gleich über eine halbe Drehung auf.
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Neuer Artikel Graphische Interfaces III: Einfache und multifunktionale Buttons (Chapter 1) :
Lassen Sie uns das Control "Button" näher ansehen. Wir werden über Klassen für die Erzeugung von einfachen Buttons diskutieren, sowie auch über Buttons mit erweiterter Funktionalität (Icon-Button und Split-Button) und Buttons, die miteinander interagieren (Gruppen von Buttons und Radio-Buttons). Zusätzlich werden wir noch einige Ergänzungen zu schon existierenden Klassen für Controls hinzufügen, um sie in ihren Möglichkeiten zu erweitern.
Ein Icon-Button wird aus drei einfachen grafischen Objekten zusammengestellt:
Abbildung 3. Zusammengehörige Teile eines Icon-Buttons-Controls
Autor: Anatoli Kazharski