Ein Crowdsourced-Projekt auf Canvas durchführen - Seite 37

 
Алексей Барбашин:

Aus den obigen Ausführungen geht hervor, dass ein Strukturelement ein spezielles Dialogsteuerelement ist, das seine eigenen Eigenschaften hat und verschachtelte Steuerelemente enthalten kann. Die Menge der Eigenschaften eines solchen universellen Steuerelements ist nur durch die Phantasie des Entwicklers begrenzt.

Natürlich können wir die Struktur vermeiden und die Eigenschaften der Steuerelemente in einem mehrdimensionalen Array beschreiben, aber das ist anfangs nicht kosteneffizient, weil wir uns genau merken müssen, welcher Index einer Eigenschaft gespeichert ist. Und das Array kann keine heterogenen Datentypen enthalten. Es zeigt sich, dass die Beschreibung des Steuerelements in der prozeduralen Programmierung nur durch die Strukturen möglich ist. Das heißt, das Strukturelement ist ein konkretes Steuerelement, d.h. das konkrete Objekt des Dialogs mit dessen Eigenschaften.

In der Standardbibliothek gibt es einen Ordner Generic in Include, der die Klasse CHashMap enthält, die die Schlüssel-Wert-Schnittstelle implementiert.
Ein einzelnes Objekt kann eine Reihe von Werten eines beliebigen Typs haben. Der Kartenbaum ist zwar zeitaufwändig, aber er funktioniert ziemlich schnell.
Könnte sogar für die Beschreibung von Eigenschaften funktionieren, sollte generell versucht werden.
Oder verwenden Sie einen anderen Klassentyp aus dieser Bibliothek, der für diese Aufgabe besser geeignet ist.

Документация по MQL5: Стандартная библиотека / Шаблонные коллекции данных
Документация по MQL5: Стандартная библиотека / Шаблонные коллекции данных
  • www.mql5.com
Библиотека содержит классы и интерфейсы для определения шаблонных коллекций, которые, в свою очередь, дают пользователю возможность создавать строго типизированные коллекции. Они обеспечивают большее удобство и высокую производительность работы с данными, чем обычные типизированные коллекции.
 

Lesen Sie es noch einmal, d.h. Sie schlagen vor, ein Array zu speichern, das einem Array von Pixeln entspricht, um in diesem Array Informationen zu speichern (in Ihrem Fall "welche Funktionsnummer" für die Verarbeitung verwendet werden soll). ?

 
Maxim Kuznetsov:

Und dann gibt es noch den umgekehrten Weg - die Verknüpfung der Schnittstelle mit dem Diagramm. Erstellen Sie zum Beispiel eine Schaltfläche, die streng an die Uhrzeit und den Preis gebunden ist.

Ein eigenes GUI kann im Handumdrehen geschrieben werden - mit allen Tabellen, Registerkarten, Menüs und allem Drum und Dran. In C# oder sogar BASIC. Und das Innere des Diagramms ist ein großes Problem für externe Anwendungen.

Und warum sollte man dann die Schnittstelle mit dem Diagramm verbinden?
Schließlich können Sie alle Daten, wie Zeitstempel und Preise, direkt aus den entsprechenden Funktionen abrufen.

 
Alexandr Andreev:

Lesen Sie es noch einmal, d.h. Sie schlagen vor, ein Array zu speichern, das einem Array von Pixeln entspricht, um in diesem Array Informationen zu speichern (in Ihrem Fall "welche Funktionsnummer" für die Verarbeitung verwendet werden soll). ?

Wenn Sie mich fragen, habe ich nichts dergleichen vorgeschlagen. Ich habe überhaupt nichts vorgeschlagen)). Ich habe nur meine Ansichten ein wenig beschrieben. Es steht Ihnen frei, anderer Meinung zu sein.

 
Реter Konow:

Im Prinzip ist es möglich, Typen zu verallgemeinern. Ich kam zu dem Schluss, dass nichts Schlimmes passieren wird, wenn die überwiegende Mehrheit der Objekteigenschaften vom Typ int ist. Alle anderen abgekürzten Typen (Double ist bei Eigenschaften grafischer Objekte praktisch nicht vorhanden) habe ich aus Gründen der Vereinfachung verworfen. Die "Überschreitung" des Speichers ist so unbedeutend, dass es keinen Sinn hat, darüber nachzudenken. Natürlich können wir uns nicht auf ein solches Sakrileg einlassen, um der Professionalität willen))). Aber wir leben im 21. Jahrhundert, und ich lasse mich nicht von Lagerfeuern bedrohen.)

Ich habe die Namen der Objekte als Zahlen dargestellt und sie in die allgemeine Reihe der Eigenschaften von Objekten eingeordnet.

Die einzige Stelle, an der ich eine andere Art von Daten benötigte, waren Steuerparameter. Dort habe ich einen zweiten Kernel erstellt, der die Eigenschaften der Parameter und die Werte selbst im Typ String speichert, den ich leicht auf alles reduzieren kann (genauer gesagt auf das, was in den Eigenschaften des Parameters steht).

TIPP: Mit "Steuerelement-Parameter" ist der PARAMETER gemeint, der von dem Steuerelement verwaltet wird.

Es stellt sich heraus, dass das globale Array, das alle Steuerelemente und alle ihre Eigenschaften enthält, eine Dimensionstiefe hat, die der Summe aller verschiedenen Eigenschaften der Steuerelemente entspricht. Das heißt, selbst wenn einige Eigenschaften des Steuerelements nicht benötigt werden, befinden sich diese Zellen dennoch in diesem Array, da das Array immer einheitlich ist.

Überraschend ist jedoch die Gleichmäßigkeit der Anordnung selbst. In dieser Hinsicht ist die Verwendung einer Struktur mehr als gerechtfertigt, denn in diesem Fall kann jede der Eigenschaften durch einen eigenen Typ beschrieben werden, einschließlich derVereinigung.

Die Verwendung von Strukturen vereinfacht die Speicherung von Eigenschaften erheblich, man muss sich nicht auf einen Typ beschränken oder auf etwas verzichten. Sie müssen sich nicht mit Konvertierungen von Strings in andere Datentypen befassen... Eine Struktur beseitigt all diese Einschränkungen von Anfang an.

Zusätzlich zu den Eigenschaften und Koordinaten selbst sollte dieses globale Array auch das Unterordnungssystem der Elemente speichern. Wenn sich das Beschriftungsobjekt in unserer Zeichnung geändert hat, müssen auch die Schaltflächen neu gezeichnet werden, da sie sich auf dem Kopfzeilenfeld befinden. Wenn sich also ein "mittleres" Steuerelement geändert hat, sollte alles darauf neu gezeichnet werden. Peter, wie speichern Sie die Struktur der Objektabhängigkeit?
 
Алексей Барбашин:

Es stellt sich heraus, dass das globale Array, das alle Steuerelemente und alle ihre Eigenschaften enthält, eine Dimensionstiefe hat, die der Summe aller verschiedenen Eigenschaften der Steuerelemente entspricht. Das heißt, selbst wenn einige Eigenschaften für ein Element nicht benötigt werden, befinden sich diese Zellen dennoch in diesem Array, da das Array immer einheitlich ist.

Überraschend ist jedoch die Gleichmäßigkeit der Anordnung selbst. In dieser Hinsicht ist die Verwendung einer Struktur mehr als gerechtfertigt, denn in diesem Fall kann jede der Eigenschaften durch einen eigenen Typ beschrieben werden, einschließlich derVereinigung.

Die Verwendung von Strukturen vereinfacht die Speicherung von Eigenschaften erheblich, man muss sich nicht auf einen Typ beschränken oder auf etwas verzichten. Sie müssen sich nicht mit Konvertierungen von Strings in andere Datentypen befassen... Eine Struktur beseitigt all diese Einschränkungen von Anfang an.

Der Kernel ist die Matrix. Sie enthält alle Eigenschaften von Objekten.

Sie können Ihre eigene Methode wählen. Aber im Laufe der Jahre bin ich zu dem Schluss gekommen, dass keine andere Methode einen ähnlich starken Anstieg der Funktionalität eines sich entwickelnden Systems ermöglicht. Maximale Einfachheit und Effizienz ist Perfektion.


 
Алексей Барбашин:

...Peter, wie speichern Sie die Struktur der Objektabhängigkeit?

Wenn Sie die Koordinierung von Abhängigkeiten meinen, auch im Kernel.

Ich habe einen speziellen Handler für die Koordinierung von Objektabhängigkeiten. Es funktioniert mit allen Arten von Abhängigkeiten.
 
Roman:

Und warum sollte man dann die Schnittstelle mit dem Diagramm verbinden?
Schließlich können Sie alle Daten, die gleichen Zeitstempel und Preise, direkt über die entsprechenden Funktionen abrufen.

die Tatsache, dass die Anwendungsschnittstelle (mit der der Benutzer arbeitet) nicht auf ein einziges Fenster beschränkt ist.

Wir sprechen doch über den Handel, nicht wahr?

Nun, die Platzierung interaktiver Elemente auf dem Diagramm (und ihre Bindung) ist fast unmöglich mit externen Mitteln zu lösen.

Auch hier sind externe Dialoge/Formulare leicht zu zeichnen. Aber innerhalb eines Diagramms sind Elemente ohne die Besonderheiten des Terminals und des spezifischen Diagramms fast unmöglich zu zeichnen.

 
Реter Konow:
Der Kern ist die Matrix. Sie enthält alle Eigenschaften der Objekte.

Sie können Ihre eigene Methode wählen. Aber im Laufe der Jahre bin ich zu dem Schluss gekommen, dass keine andere Methode eine ähnlich starke Zunahme der Funktionalität eines sich entwickelnden Systems ermöglicht. Maximale Einfachheit und Effizienz ist Perfektion.


Matrix ist verschachtelte Schleifen und verschachtelte Schleifen sind Zeit. Imho kein Sarkasmus, nur logische Überlegungen.

 

Peter, Sie erhalten Folgendes: Der Kern besteht aus der globalen Matrix der Elementeigenschaften, der globalen Matrix der Elementwerte, der globalen Matrix der Abhängigkeiten, der globalen Matrix der Bilder...

Wenn weitere Eigenschaften hinzugefügt werden müssen, erhöht sich die Dimensionalität der Matrizen.

Der Zugriff auf die Eigenschaften erfolgt ausschließlich über Indizes, da die Zellen keine Namen haben.

Zumindest auf Feldnamen kann mit einer Struktur zugegriffen werden.

Peter, du bist... riesig...

Ich, zum Beispiel, sehe das so (vereinfacht):

class CControl : public CObject

{

public:

        int ПозицияХ;

        int ПозицияY;

        int Длина;

        int Ширина;

        color ЦветОсновы;

        color ЦветБордюра;

        int ТолщинаБордюра;

}

Eine "Klasse" ist de facto eine bestimmte Zeichenfolge in Ihrem globalen Array, nur mit einem "menschlicheren" Gesicht. Klassen sind so konzipiert, dass sie ihre eigenen Datenobjekte mit einer Reihe verständlicher Eigenschaften erstellen, auf die über den Namen und nicht über einen Index zugegriffen werden kann. Eine Klasse ist lediglich ein universeller Typkonstruktor.

Wir erstellen also ein einfaches Steuerelement, das die häufigsten Eigenschaften enthält, die fast jedes Steuerelement hat.

Sie können darauf aufbauend spezialisierte Objekte erstellen:

class CButton : public CControl 

{

public:

        string Заголовок;

        int Image[];

}

Das heißt, jeder nachfolgende Kontrolltyp ergänzt einfach den Basistyp um die erforderlichen Eigenschaften.

Und da, wie ich bereits geschrieben habe, die grundlegenden Eigenschaften im Basissteuerelement gespeichert sind, erfolgt die Traversierung des Cursors im Steuerelement durch Überprüfung eines Datentyps: CControl. Nachdem das Programm das gewünschte Objekt gefunden hat, hat es sofort Zugriff auf die Eigenschaften dieses Objekts, da sich der Programmpunkt bereits im Objekt selbst befindet, genau wie in Ihrer Schleife das Programm auf der gewünschten Array-Zeile steht.

Grund der Beschwerde: