Diskussion zum Artikel "Die Betrachtung der CCanvas-Klasse. Wie man transparente Objekte zeichnet"
Vladimir, ich bin nicht gut auf Leinwänden. Hier ist eine Frage. Es gibt eine Leinwand. Auf ihr befindet sich ein Textetikett. Warum sieht das Terminal das Ereignis des Klickens auf das Etikett als ein Ereignis des Klickens auf die Leinwand an? Kann dieser Konflikt irgendwie aufgelöst werden?
...
Es gibt eine Eigenschaft, um die Priorität dafür festzulegen:
OBJPROP_ZORDER - Priorität des grafischen Objekts, das Mausklick-Ereignisse im Diagramm empfangen soll (CHARTEVENT_CLICK). Standardmäßig ist der Wert bei der Erstellung auf Null gesetzt, aber Sie können die Priorität bei Bedarf erhöhen. Wenn sich überlappende Objekte das CHARTEVENT_CLICK-Ereignis empfangen, wird es nur von einem Objekt empfangen, dessen Priorität höher ist als die der anderen.
Ich werde Ihnen den Code später schicken. OBJPROP_ZORDER - für Kanvas kann nicht gesetzt werden...
Ich habe die Ursache für die fehlerhafte Verarbeitung gefunden... Es gibt 2 Leinwände, eine überlagert die andere. Und es gibt eine Textbeschriftung oben drauf. Das ist, was OnChartEvent() nicht sieht.
Ich werde Ihnen den Code später schicken. OBJPROP_ZORDER - für Kanvas kann nicht eingestellt werden...
Ich habe herausgefunden, was die Ursache für die fehlerhafte Verarbeitung ist... Es gibt 2 Leinwände, eine überlagert die andere. Und es gibt eine Textbeschriftung oben drauf. Das ist es, was OnChartEvent() nicht sehen kann.
Doch, das kann es. Es ist ein gewöhnliches Objekt wie OBJ_BITMAP_LABEL oder OBJ_BITMAP.
Sie können. Es ist ein gewöhnliches Objekt wie OBJ_BITMAP_LABEL oder OBJ_BITMAP.
Richtig. Danke.
Dazu müssen Sie den Namen des gebundenen Diagrammobjekts heranziehen und ihm Priorität einräumen.
So sieht es aus (Auszug aus dem Initialisierungsblock):
//--- Erstellen der 1. Leinwand if(!myCanvas1.CreateBitmapLabel("My canvas1",_X,_Y,Width,Height,COLOR_FORMAT_ARGB_RAW)) { Print("Error creating base canvas: ",GetLastError()); return INIT_FAILED; } //--- Anzeige myCanvas1.Erase(XRGB(0x1F,0x1F,0x1F)); myCanvas1.Update(); string obj_name=myCanvas1.ChartObjectName(); if(!ObjectSetInteger(0,obj_name,OBJPROP_ZORDER,0)) return INIT_FAILED;
Hallo Vladimir,
vielen Dank für diesen interessanten Artikel.
Es gibt einen kleinen Fehler in Ihrer Tabelle 3.
| С'255,0,255' | 0xFF00FF | 1111 1111 0000 0000 1111 1111 | |
| XOR | |||
| C'255,255,255' | 0xFFFFFF | 1111 1111 1111 1111 1111 1111 | Weiß (Hintergrund) |
| = | |||
| С'0,255,0' | 0x00FF00 | 1111 1111 1111 0000 0000 0000 | |
| Sollte sein: | 0000 0000 1111 1111 0000 0000 | Grün | |
Hallo Vladimir,
vielen Dank für diesen interessanten Artikel.
Es gibt einen kleinen Fehler in Ihrer Tabelle 3.
| С'255,0,255' | 0xFF00FF | 1111 1111 0000 0000 1111 1111 | |
| XOR | |||
| C'255,255,255' | 0xFFFFFF | 1111 1111 1111 1111 1111 1111 | Weiß (Hintergrund) |
| = | |||
| С'0,255,0' | 0x00FF00 | 1111 1111 1111 0000 0000 0000 | |
| Sollte sein: | 0000 0000 1111 1111 0000 0000 | Grün | |
Die Frage ist folgende. Was könnte die beste Implementierung für das Bewegen der Leinwand im Diagramm sein? Eine Art von Methode:
- 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 Die Betrachtung der CCanvas-Klasse. Wie man transparente Objekte zeichnet :
Sie wollen mehr als nur komische Grafiken von gleitenden Mittelwerten? Sie möchten etwas Schöneres in Ihrem Terminal abbilden, als nur ein schlichtes, gefülltes Rechteck? Das geht! Im Terminal kann man nämlich tatsächliche attraktive Grafiken zeichnen. Und zwar durch Implementierung der CСanvas-Klasse, die zur Erzeugung von individuell angepassten Grafiken benutzt wird. Mit dieser Klasse können Sie Transparenz umsetzen, Farben mischen und sogar den Anschein von Transparenz durch Überlappung und Ineinanderlaufen von Farben erreichen.
Keine Angst, ich habe die Transparenz des Glases nicht vergessen. Dazu kommen wir aber erst im zweiten Teil dieses Beitrags.
Die ARGB-Farbwiedergabe ist ein uint Type aus vier Bytes, in dem die folgenden Werte aufgezeichnet werden: ein Alpha-Kanal, Rot, Grün und Blau. Um also der Farbe im RGB-Format Transparenz zu verleihen, wird ein extra Byte mit dem Wert 'Transparenz' hinzugefügt - nämlich der sog. Alpha-Kanal.
Abb. 3 ARGB
Autor: Karputov Vladimir