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

 
Anatoli Kazharski:

ElementSet, wobei Sie (1) Eigenschaft und Wert oder (2) Eigenschaft, Modifikator und Wert angeben müssen.

Ja, es ist universell für den Zugriff auf Steuereigenschaften.

Im Allgemeinen ist PropGet/Set ein guter Mechanismus zur Behandlung von Vorlagenklassen, wenn die geerbte Schnittstelle zunächst unbekannt ist.


Aber ich möchte die Diskussion auf meine ursprüngliche Frage zurückführen - wie kann ich einen "Schnellstart" für einen Programmierer in Bezug auf das Farbschema von Steuerelementen machen?

Und ist es möglich, nicht eine funktionale (SetBgColor oder SetProp(Enum_Color, ), etc.), sondern eine universelle Klasse von Attributen zu implementieren.
So würden alle Controller auf eine universelle Klasse von Attributen zugreifen und der Programmierer könnte leicht verstehen, welche Farbe von welchem Controller verwendet wird.

Aber all dies ist meine Argumentation für mein Vorhaben. Ich schließe nicht aus, dass sich noch sehr viel ändern wird, wenn ich mit der Transition beginne. Alles, was ich oben geschrieben habe, ist also möglicherweise nicht mehr relevant für das Thema, das hier diskutiert wird. )

Sie sollten es zu einem zufriedenstellenden Ergebnis entwickeln. Je mehr Programmierer es verstehen, desto niedriger wird die Schwelle für die Eingabe Ihrer Merkmalsklassen sein.
 
o_O:

Im Prinzip stimme ich zu, es wird klar sein, welche Farben es hat und was geändert werden kann.

stellt sich die Frage, ob das Thema eine Redundanz der nicht verwendeten Parameter bedeutet.

Ja, sie ist überflüssig, und zwar bei allen Varianten. Aber dann ist es praktisch, ein neues Thema zu erstellen, indem man die Werte im vorherigen Thema neu malt und ändert. Genau wie Themen in Windows.

P.S.

Und ich bin skeptisch, was die massenhafte Änderung einiger Werte durch den Programmierer angeht, die sich von denen im aktuellen Thema unterscheiden. Es erinnert mich an ein Delphi-Projekt, bei dem man als erstes versucht, die Oberfläche in den eigenen Farben zu malen, die sich dann auch nicht ändern, wenn man das Systemthema ändert.

Und warum sollten die Designstile irgendwo verwischt werden? Vererben Sie eine Themenklasse von einem der vorhandenen Themen und ändern Sie nur die Werte, die geändert werden müssen.

 

Es gibt diese CSS-Technologie

1) bekannt und gut dokumentiert

2) vertraut und vielseitig

3) Tags==Kontrollen im Prinzip, was es für unsere Aufgabe geeignet macht


Probieren Sie es aus, es sollte wie vorgesehen funktionieren.

 
o_O:

es gibt eine CSS-Technologie


Dann gehen Sie direkt zu LESS / SCSS (SASS)
 
Igor Volodin:

Dann gehen Sie direkt zu LESS / SCSS (SASS)

ugh, Lass ist wahrscheinlich gut, aber wir brauchen seine Funktionalität nicht.

Wir nehmen rein das Prinzip des Aufbaus und der Neudefinition von Stilen in Kaskade^selektiv^punktweise - so wie sie es tun.

 

Und stellen Sie sicher, dass Sie eine responsive Design-Option für verschiedene Auflösungen anbieten. Siehe Media Queries in CSS

Und einige Teile können in ihrer Größe fixiert sein, während andere sich so weit wie möglich ausdehnen können.

 

Liebe Forumsmitglieder, ich möchte niemanden demotivieren, aber die zur Diskussion stehende Technologie ist meiner Meinung nach so komplex, dass sie nicht durch gemeinsame, verteilte Anstrengungen umgesetzt werden kann. Wir können diese Bemühungen nicht effektiv kombinieren, da wir alle unterschiedliche Niveaus von Verständnis, Professionalität und Ansätzen haben... Wir sind auch durch Entfernungen und sogar durch Länder getrennt.

Meine Schlussfolgerung ist, dass diese Technologie von einem einzelnen Entwickler implementiert werden kann, der lange und hart daran gearbeitet hat. Vielleicht mehr als ein Jahr. Aber es ist unwahrscheinlich, dass diese Person diese Technologie mit Hilfe von Crowdsourcing entwickelt, weil sie zu viel Mühe und Herzblut in diese Arbeit gesteckt hat und sich dabei einfach verausgabt hat... Es ist sein Projekt und er hat das Recht, es nicht frei zu verbreiten. (Vielleicht am Anfang, aber nicht immer).

Ich glaube, diese Technologie wurde bereits in MQL implementiert.

P.S. Aber selbst wenn dies der Fall ist - warum sollte man nicht versuchen, es erneut umzusetzen? ))

 
Igor Volodin:

Warum es nützlich sein könnte:

1. die Schnittstelle auf der Bitmap ist schnell. Sie ist so schnell, dass sie von der Systemschnittstelle praktisch nicht zu unterscheiden ist. Ich habe zum Beispiel durchscheinende Elemente mit Farbverläufen implementiert, undselbst wenn sie sich bewegen, werden sie ohne sichtbare Verzögerung gerendert, wobei die Farbmischung und die Alphakanalberechnung bei anderen Objekten mit durchscheinenden Farbverläufen berücksichtigt werden.

2. Die Schnittstelle ist skalierbar. Sie können die Anwendung komplexer gestalten und sie wird nicht durch das Löschen und Erstellen einer großen Anzahl von Diagrammobjekten verlangsamt. Die Kosten für das Neuzeichnen sind minimal, es wird lediglich ein Bild ersetzt, und zwar in Tausendstelsekunden.

3. Sie können vorgefertigte Steuerelemente erstellen und die Möglichkeit bieten, neue Steuerelemente zu erstellen, da Sie z. B. Ihren eigenen Ereignis-Pool bereitstellen können:

OnMouseDown - drückt die LKM

OnMouseUp - drückt die Maustaste

OnMouseHoverOn - Bewegen des Mauszeigers über ein Objekt

OnMouseHoverOut - bewegt den Mauszeiger vom Objekt weg

OnMouseClick - Drücken und Klicken innerhalb der Objektgrenzen

OnMouseDblClick - doppelter Mausklick innerhalb der Grenzen des Objekts

OnDragStart - Ereignis, das einmal zu Beginn der Bewegung mit gedrückter linker Maustaste auftritt

OnDragMove - Ereignis, das bei der Bewegung mit der linken Maustaste erzeugt wird

OnDragEnd - Ereignis, das nach dem Verschieben mit LKM erzeugt wird

OnPut - Objekt wird in ein anderes Objekt umgewandelt

OnGet - das Objekt wird in ein anderes Objekt umgewandelt

OnFocus - Objekt hat den Fokus erhalten

OnBlur - Objekt verliert den Fokus

OnResize - Objekt hat Größe geändert

OnParentResize - das übergeordnete Objekt hat seine Größe geändert

OnKeyPress - Taste gedrückt

OnChange - Wert eines Feldes geändert

usw.

Im Folgenden übertreiben Sie ein wenig:

Die Geschwindigkeit, mit der eine Bitmap gezeichnet wird, hängt von ihrer Größe ab. Wenn Sie die gesamte Bitmap, die das Fenster darstellt, neu zeichnen, wenn Sie das Teil neu zeichnen, wird die Reaktion langsam sein (verifiziert). Die offensichtliche Lösung ist, nur den Bereich der Bitmap neu zu malen.

Um jedoch nur einen Teil der Bitmap, die ein Fenster darstellt, neu zu zeichnen, müssen Sie die digitale Maske der Bitmap im Speicher (in einem Array) speichern. Als Nächstes müssen Sie in dieser Maske navigieren und das gewünschte Muster darin finden. Berücksichtigen Sie jedoch, dass es viele Fenster geben kann. Berechnen Sie nun, wie viel Speicherplatz für die Speicherung der Masken aller Fenster benötigt wird. Sie könnten ein Prioritätensystem einrichten, um zu entscheiden, welche Fenster Sie sich merken und welche Sie "vergessen" wollen, und wann. Aber das ist nicht einfach.

Sie müssen verstehen, dass das Neuzeichnen ein Neuschreiben von Werten in einem Array ist, und wenn Sie 1000000 Werte neu schreiben müssen (ungefähre Anzahl von Pixeln im Fensterbild und in der Bitmap), dann sind es nicht "Tausendstel Sekunden", sondern Sekunden. Daher sollten Sie ein Fenster nur einmal komplett zeichnen, es im Speicher sichern und dann, bei Ereignissen, jedes Objekt einzeln neu zeichnen. Dann wird die Geschwindigkeit sehr hoch sein.

Offensichtlich haben Sie nur einzelne Objekte implementiert, aber versuchen Sie, ein Fenster zu erstellen und dort die Interaktivität seiner Elemente zu implementieren. Sie werden verstehen, was ich meine.

Was die von Ihnen angeführten Ereignisse betrifft, so ist ihre Implementierung im Programm nicht mit der Technologie der Zeichnungssteuerung verbunden und sollte in jeder Schnittstelle vorhanden sein.

 
Реter Konow:

...

Offensichtlich haben Sie nur einzelne Objekte implementiert, aber versuchen Sie einmal, ein Fenster zu erstellen und dort die Interaktivität Ihrer Elemente zu implementieren, dann werden Sie sehen, was ich meine.

...

Lesen Sie diesen Beitrag(Link) und sehen Sie sich dort auch Beispiele für Gif-Animationen an.
Обсуждение статьи "Графические интерфейсы I: Подготовка структуры библиотеки (Глава 1)"
Обсуждение статьи "Графические интерфейсы I: Подготовка структуры библиотеки (Глава 1)"
  • www.mql5.com
Включение в проект классов для хранения указателей и обработки событий.
 
Реter Konow:

Sie übertreiben ein wenig mit dem Folgenden:

Die Geschwindigkeit beim Zeichnen von Bitmaps hängt von ihrer Größe ab. Wenn Sie die gesamte Bitmap, die ein Fenster darstellt, neu malen, wird die Reaktion langsam sein (getestet). Die naheliegende Lösung ist, nur den Bereich des Teils zu lackieren, der neu lackiert werden soll.

Um jedoch nur einen Teil einer Bitmap-Zeichnung, die ein Fenster darstellt, neu zu zeichnen, müssen Sie eine digitale Maske dieser Bitmap im Speicher (in einem Array) haben. Als Nächstes müssen Sie in dieser Maske navigieren und den gewünschten Teil darin finden. Berücksichtigen Sie jedoch, dass es viele Fenster geben kann. Berechnen Sie nun, wie viel Speicherplatz für die Speicherung der Masken aller Fenster benötigt wird. Sie könnten ein Prioritätensystem einrichten, um zu entscheiden, welche Fenster Sie sich merken und welche Sie "vergessen" wollen, und wann. Dies ist jedoch keine leichte Aufgabe.

Sie müssen verstehen, dass das Neuzeichnen ein Neuschreiben von Werten in einem Array ist, und wenn Sie 1000000 Werte (ungefähre Anzahl von Pixeln im Fensterbild und in der Bitmap) neu schreiben wollen, dauert es Sekunden, nicht "Tausendstelsekunden". Daher sollten Sie ein Fenster nur einmal komplett zeichnen, es im Speicher sichern und dann, bei Ereignissen, jedes Objekt einzeln neu zeichnen. Dann wird die Geschwindigkeit sehr hoch sein.

Wahrscheinlich haben Sie nur einzelne Objekte implementiert, aber versuchen Sie einmal, ein Fenster zu erstellen und dort die Interaktivität Ihrer Elemente zu implementieren. Sie werden verstehen, wovon ich spreche.

Was die von Ihnen angeführten Ereignisse betrifft, so hat ihre Implementierung im Programm nichts mit der Technologie der Zeichnungssteuerung zu tun und muss in jeder Schnittstelle vorhanden sein.

Ich möchte eine kleine Klarstellung vornehmen:

Zunächst erstellen wir eine digitale Maske des Fensters mit all seinen Elementen. Dann erstellen wir eine Bitmap mit ResourceCreate(). Wir bekommen unser Fenster auf der Karte.

Dann bewegen wir die Maus über die Oberfläche dieses Fensters und fangen z.B. das Pointing-Ereignis (_Object_Pointed) auf.

Ich werde zwei Ansätze für die Implementierung von Objektinteraktivität beschreiben - einen schlechten, den anderen besseren:

1. Wenn die digitale Maske unseres Fensters nach der ersten Erstellung nicht im Array gespeichert wurde, müssen wir die Zeichnung des Fensters komplett neu erstellen, wenn wir irgendein Detail ändern wollen. Das heißt, Sie müssen sie neu digitalisieren. Dies nimmt an sich schon Zeit in Anspruch, da Sie das Array mit den Pixelfarbwerten aller Fensterdetails initialisieren müssen, um es an ResourceCreate() zu übergeben. Je größer das Fenster und je mehr Details es enthält, desto länger dauert es (etwa 250 Millisekunden bis 2 Sekunden). Und so weiter, bei jedem Ereignis eines jeden Elements. Diese Option ist zu fehlerhaft.

2. Wenn eine numerische Maske in einem Array gespeichert wurde, müssen wir nur die Werte neu initialisieren, die sich auf einen bestimmten Teil dieses Fensters beziehen. Wir suchen diesen Teil im Array und schreiben seine Werte um. Als Nächstes - senden wir das Array an ResourceCreate() und erhalten sofort das Ergebnis.

Das ist eigentlich die ganze Technologie. Fast))