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

 
Nikolai Semko:
Ich habe das Beispiel der GButton-Klasse fast fertig, muss aber weglaufen. Ich werde sie morgen fertigstellen und präsentieren.
Großartig. Sehr interessant. )
 
Реter Konow:
Großartig. Sehr interessant. )


Das ist das Ergebnis.


Die Schaltfläche kann im Hintergrund oder im Vordergrund angezeigt werden, mit oder ohne Verriegelungsfunktion.

In der Beispieldatei CanvasButton.mq5 ist es möglich, die Schaltfläche mit der Maus zu ziehen. Drücken Sie dazu einfach die Strg-Taste, um die blaue Schaltfläche zu bewegen, und die Umschalttaste, um die rote Schaltfläche zu bewegen.

Da die GButton-Klasse ein Nachkomme der CCanvas-Klasse ist, demonstriert das Beispiel die Möglichkeit, Funktionen der CCanvas-Klasse im CircleWu-Beispiel zu verwenden (dies wird in OnInit implementiert). So ist es möglich, mit Funktionen der CCanvas-Klasse Text auf die Schaltfläche zu schreiben.

Diese Klasse gibt natürlich nicht vor, sauber zu sein. Die Grafik glänzt nicht mit Perfektion und 3D ist sehr konventionell; die Schatten sind nicht implementiert, die Ausführungsgeschwindigkeit ist nicht optimiert. Und höchstwahrscheinlich gibt es viele Ecken und Kanten und verschiedene Kontrollen fehlen. Urteilen Sie also nicht streng.

Wenn Sie etwas mehr Zeit investieren, ist das natürlich möglich:


Ich habe nur versucht... man könnte sagen - eine Richtung vorgeben.


Die Datei Canvas.mqh unterscheidet sich von der Originaldatei nur dadurch, dass das Array m_pixels als öffentlich definiert ist.

Dateien:
GButton.mqh  20 kb
Canvas.mqh  152 kb
 
Nikolai Semko:


Wir haben Folgendes erhalten.


Die Schaltfläche kann im Hintergrund oder im Vordergrund angezeigt werden und kann angeklickt oder nicht angeklickt sein.

In der Beispieldatei CanvasButton.mq5 ist es möglich, die Schaltfläche mit der Maus zu ziehen. Drücken Sie dazu einfach die Strg-Taste, um die blaue Schaltfläche zu bewegen, und die Umschalttaste, um die rote Schaltfläche zu bewegen.

Da die GButton-Klasse ein Nachkomme der CCanvas-Klasse ist, demonstriert das Beispiel die Fähigkeit, Funktionen der CCanvas-Klasse auf dem CircleWu-Beispiel zu verwenden (dies wird in OnInit implementiert). So ist es möglich, mit Funktionen der CCanvas-Klasse Text auf die Schaltfläche zu schreiben.

Diese Klasse gibt natürlich nicht vor, sauber zu sein. Die Grafik glänzt nicht mit Perfektion und 3D ist sehr konventionell; die Schatten sind nicht implementiert, die Ausführungsgeschwindigkeit ist nicht optimiert. Und höchstwahrscheinlich gibt es viele Ecken und Kanten und verschiedene Kontrollen fehlen. Urteilen Sie also nicht zu hart.

Wenn Sie etwas mehr Zeit investieren, können Sie das natürlich auch tun:


Ich habe nur versucht... man könnte sagen - die Richtung vorgeben.


Die Datei Canvas.mqh unterscheidet sich von der Originaldatei nur dadurch, dass das Array m_pixels als öffentlich definiert ist.

Nikolay, meiner Meinung nach ist es ziemlich gut geworden. Wir haben einen guten Anfang gemacht und können noch weiter gehen. Ich würde diese Art von Taste als Schlüssel bezeichnen. Wenn Sie 4 klare Rahmenlinien haben: - oben, links, hell und rechts, unten - dunkel für den gedrückten Zustand und umgekehrt, wird es noch besser sein (müssen nur einen hellen Hintergrund hinzufügen, da sonst die dunklen Linien auf einem schwarzen Hintergrund Chart wird nicht sichtbar sein). Und dann können Sie Text und Bild einstellen.

Wie auch immer, netter Versuch. )

 
Реter Konow:

. Wenn Sie die 4 klaren Linien des Rahmens entlang der Ränder teilen: - oben, links hell und rechts, unten dunkel für den gedrückten Zustand und umgekehrt für den gedrückten Zustand, wird es noch besser (Sie müssen nur einen hellen Hintergrund hinzufügen, sonst sind die dunklen Linien vor dem schwarzen Diagramm nicht sichtbar).

Ja, es ist klar, dass man so zeichnen kann, wie man will. In diesem Fall habe ich mir nicht vorgenommen, ein Meisterwerk zu schaffen. Aber die erste Sache, die ich verbessern möchte, ist, alle Arrays der Schaltfläche Bild (zwei Arrays in diesem Fall) zu generieren und dann kopieren Sie sie nur durch ArrayCopy, so dass wir nicht haben, um ein Bild jedes Mal zu erstellen. Dies wird die Arbeit stark zu reduzieren, aber auf Kosten der zusätzlichen Verbrauch von RAM, sondern weil es jetzt üblich ist, auf Computern 16 GB RAM, und wenn es sogar eine Menge von Tasten, die zusätzlichen Speicherverbrauch ist unwahrscheinlich, dass 1-2 MB überschreiten, vor allem, wenn die gleichen Tasten werden die gleichen Arrays verwenden. Ich denke also nicht, dass das ein Problem ist. Die Hauptsache ist die Geschwindigkeit.
 
Nikolai Semko:
Ja, es ist klar, dass Sie zeichnen können, was Sie wollen. In diesem Fall habe ich mir nicht das Ziel gesetzt, ein Meisterwerk zu schaffen. Aber die erste Sache, die ich verbessern möchte, ist, alle Arrays der Schaltfläche Bild (zwei Arrays in diesem Fall) zu generieren und dann kopieren Sie sie nur durch ArrayCopy, so dass wir nicht haben, um ein Bild jedes Mal zu erstellen. Dies wird die Arbeit stark zu reduzieren, aber auf Kosten der zusätzlichen Verbrauch von RAM, sondern weil es jetzt üblich ist, auf Computern 16 GB RAM, und wenn es sogar eine Menge von Tasten, die zusätzlichen Speicherverbrauch ist unwahrscheinlich, dass 1-2 MB überschreiten, vor allem, wenn die gleichen Tasten werden die gleichen Arrays verwenden. Ich denke also nicht, dass das ein Problem ist. Die Hauptsache ist die Geschwindigkeit.

Ich verstehe. Als ich die Frage nach der Schaltfläche stellte, wollte ich herausfinden, ob es möglich ist, dies mit einer Leinwand zu tun:


Gepresst:

Gepresst:

In diesem Beispiel besteht jede Seite des Rahmens aus mehreren Zeilen. Auf jeder Seite des Rahmens befinden sich insgesamt 4 Farbverlaufslinien. Jede Linie hat einen anderen Farbton, der vom Zustand der Schaltfläche und der gegebenen Form des Rahmens abhängt. Wenn CCanvas die Möglichkeit hat, die Farbe für bestimmte Verlaufslinien des Rahmens festzulegen, dann ist es einfach, das obige Beispiel umzusetzen. Das ist genau das, was ich herausfinden wollte.

 
Реter Konow:

Ich verstehe. Als ich die Frage nach der Schaltfläche stellte, wollte ich herausfinden, ob es möglich ist, dies mit einer Leinwand zu tun:


Gepresst:

Gepresst:

In diesem Beispiel besteht jede Seite des Rahmens aus mehreren Zeilen. Auf jeder Seite des Rahmens befinden sich insgesamt 4 Farbverlaufslinien. Jede Zeile hat einen anderen Farbton, der vom Zustand der Schaltfläche und der gegebenen Form des Rahmens abhängt. Wenn CCanvas die Möglichkeit hat, die Farbe für bestimmte Verlaufslinien des Rahmens festzulegen, dann ist es einfach, das obige Beispiel umzusetzen. Das ist genau das, was ich herausfinden wollte.

Ich kann dich nicht verstehen, Peter. Du sprichst von Fleisch und ich von dem Skelett. Wenn man Knochen hat, kann man Fleisch züchten. Steht in meinem Beispiel nicht "Pressed, Pressed"? Haben Sie schon einmal in die Klasse GButton geschaut? Peter, mein Rat: Lassen Sie alles stehen und liegen und lernen Sie dringend OOP. Sie sind in Ihrem Projekt gerade an eine Grenze gestoßen, die man als aufgeblähten Code bezeichnet. Dies kann durch OOP leicht überwunden werden.
Und mit CCanvas können Sie alles tun, sogar Windows innerhalb des MT5-Fensters schreiben, natürlich im vollen visuellen Emulationsmodus :), da es keinen Zugriff auf die Hardware gibt

 
Nikolai Semko:
Ich kann dich nicht verstehen, Peter. Sie sprechen von Fleisch und ich von Skelett. Wenn du Knochen hast, kannst du Fleisch hinzufügen. Steht in meinem Beispiel nicht "Pressed, Pressed"? Haben Sie schon einmal in die Klasse GButton geschaut? Peter, mein Rat: Lassen Sie alles stehen und liegen und lernen Sie dringend OOP. Sie sind in Ihrem Projekt an eine Grenze gestoßen, die als aufgeblähter Code bezeichnet wird und mit Hilfe von OOP leicht zu überwinden ist.
Und mit Canvas kann man alles machen, sogar Windows kann innerhalb des MT5-Fensters geschrieben werden.

))) Warum habe ich also dieses Thema begonnen? ) Ich werde jetzt OOP studieren.

Ihr Beispiel hat Schaltflächen, Klick-Ereignisse und Zustände dieser Schaltflächen. Alles ist in Ordnung. Aber Nikolai, ich verstehe immer noch nicht, was ich gefragt habe - gibt es eine Option in der CCcanvas-Klasse, um eine bestimmte Farbe für die Verlaufslinien des Rahmens festzulegen? Wenn man sich Ihr Beispiel ansieht, könnte man meinen, dass es... Wenn ja, können Sie etwas Ähnliches wie mein Beispiel zeichnen? Ich interessiere mich für die Einfachheit und die Möglichkeiten des Zeichnens mit den Funktionen dieser Klasse, und Sie sprechen von Geschwindigkeit und Verbesserungen der Funktionen der Klasse. Das ist ein etwas anderes Thema.

 
Реter Konow:

))) Warum habe ich also dieses Thema begonnen? ) Ich werde mich jetzt mit OOP befassen.

Es ist besser, das Erlernen von OOP mit etwas Einfacherem zu beginnen, nicht mit Canvas.
 
Vasiliy Sokolov:
Es ist besser, das Erlernen von OOP mit etwas einfacherem als Canvas zu beginnen.
Sie haben Recht. Vielleicht sollte ich lieber mit einem Lehrbuch anfangen. Wirklich, OOP ist eine komplizierte Sache. Es ist verwirrend...
 
Nikolai Semko:
Haben Sie schon einmal in die Klasse GButton geschaut?


Ich habe mir die Klasse angesehen. Es sieht cool aus, aber ich verstehe den ganzen Mechanismus der CCanvas-Klasse nicht. Deshalb habe ich dort auch keine Antwort auf meine Frage gefunden.
Grund der Beschwerde: