Leinwand ist cool! - Seite 6

 
Vladimir Karputov:

canvas.Rectangle ist kein Objekt, sondern ein Befehl zum Zeichnen einer Reihe von Pixeln. Es ist wie bei einem Schuss - eine Kugel geht los, und das war's dann. Es gibt keine Rückmeldung.

Danke für die Rückmeldung - ich habe es verstanden.

Rashid Umarov:

Es gibt einen Artikel mit dem Titel Exploring the CCanvas class. Für dieImplementierung der Transparenz von grafischen Objekten sollte es eine Lösung geben.

Ich habe es 217 Mal angesehen und es ist jetzt offen, aber ich habe keine Lösung gesehen.

Ich brauche ein Live-Beispiel für die Änderung der Farbe von Leinwand und Rahmen in OnTick().

Ich danke Ihnen!

 
Vitaly Muzichenko:

Danke für den Hinweis - ich habe es verstanden.

Ich habe mir das 217 Mal angesehen, und es ist jetzt offen, aber ich habe keine Lösung gesehen.

Ich benötige ein Live-Beispiel für die Änderung der Farbe von Leinwand und Rahmen in OnTick().

Ich danke Ihnen!

Basierend auf meinem Code, nur in der Änderung der Farbe der Leinwand und Zeichnen eines Rahmens stecken.

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   static long counter=0;
   counter++;
   if(counter%40==0)
     {
      m_canvas.Erase(ColorToARGB(clrBlue,210));
      m_canvas.Rectangle(10,10,m_canvas.Width()-10,m_canvas.Height()-10,ColorToARGB(clrRed,255));
      m_canvas.Update();
      return;
     }
   if(counter%20==0)
     {
      m_canvas.Erase(ColorToARGB(clrRed,210));
      m_canvas.Rectangle(10,10,m_canvas.Width()-10,m_canvas.Height()-10,ColorToARGB(clrBlue,255));
      m_canvas.Update();
      return;
     }
  }


Da ich Farben mit Transparenz verwende, habe ich beim Erstellen der Leinwand"COLOR_FORMAT_ARGB_NORMALIZE" angegeben:

//--- create canvas
   if(!m_canvas.CreateBitmapLabel("SampleCanvas",5,15,700,300,COLOR_FORMAT_ARGB_NORMALIZE))
Dateien:
 
Vladimir Karputov:

Auf der Grundlage meines eigenen Codes füge ich einfach eine andere Leinwandfarbe ein und zeichne einen Rahmen.


Da ich Farben mit Transparenz verwende, habe ich beim Erstellen der Leinwand"COLOR_FORMAT_ARGB_NORMALIZE" angegeben:

Ich werde jetzt einen Blick darauf werfen, danke!

Das, was ich erwartet habe, habe ich schon vor langer Zeit bekommen, es ist eine kaum transparente Leinwand mit einem Rahmen und einer Auswahl, aber jetzt muss ich die Farben ändern, was nicht funktioniert.


 
Vitaly Muzichenko:

Ich werde es mir jetzt ansehen, danke!

Das, was ich erwartet habe, habe ich schon lange bekommen: eine kaum transparente Leinwand mit einem Rahmen und einer Auswahl, aber jetzt muss ich die Farben ändern, was nicht funktioniert.


Wahrscheinlich liegt das Problem bei ENUM_COLOR_FORMAT (bei der Erstellung der Leinwand) und der Methode zum Abrufen der Farbe.

 
Vitaly Muzichenko:

In OnInit erstelle ich eine Leinwand

Dann muss ich die Farbe um 10:00 Uhr in OnTick in grau ändern und um 11:00 Uhr wieder in den ursprünglichen Zustand zurückversetzen.

Das funktioniert nicht:

Frage:

Wie ändere ich die Farbe der Leinwand und des Rahmens - kein Bezug zu Objektnamen?

Ich danke Ihnen!

Ich habe das Gefühl, dass Sie mit den Farben herumgespielt haben.

Welche Bedeutung hat diese Zeile?

ObjectSetInteger(0,"CanvasExamlple",OBJPROP_COLOR,clrNONE);

COLOR_FORMAT_ARGB_NORMALIZE muss die Leinwand nicht mit der Hintergrundfarbe füllen, sondern eher mit Null:

canvas.Erase(0);

denn es bedeutet, dass die Leinwand vollständig transparent ist.

Auch die 16-Farben-Darstellung ist praktisch:

zum Beispiel:

0x00000000 - völlig transparentes Schwarz

0xFF000000 - undurchsichtiges Schwarz

0xFFFFFFFFFF - undurchsichtiges Weiß

0xFFFF0000 - undurchsichtiges Rot

0xFF00FF00 - undurchsichtiges Grün

0xFF0000FF - undurchsichtiges Blau

0x8000FF00 - transluzentes Grün

0x80FFFFFFFF - durchscheinendes Schwarz

0xFF808080 - grau

usw.

 
Vladimir Karputov:

Wahrscheinlich ein Problem mit ENUM_COLOR_FORMAT (bei der Erstellung des Kanvas) und der Methode zum Abrufen der Farbe.

Problem gelöst.

In meinem Code wurde die Leinwand nicht entfernt, als ich das Terminal schloss, so dass sie beim Starten bereits auf dem Diagramm war, so dass sie nicht initialisiert wurde und die Eigenschaftsänderungen nicht wussten, wo sie anzuwenden waren.

Vielen Dank an alle!

 
Nikolai Semko:

Ich habe das Gefühl, dass Sie mit den Farben herumgespielt haben.

Was ist der Sinn dieser Zeile?

ObjectSetInteger(0,"CanvasExamlple",OBJPROP_COLOR,clrNONE);

Der Sinn der Linie ist, dass man ohne sie folgendes Bild erhält


Wenn mit der Linie, dann ist das richtig, ein schöner Rahmen mit meiner gewählten Farbe


 
Vitaly Muzichenko:

Problem gelöst.

Mein Code entfernte die Leinwand nicht, als ich das Terminal schloss, so dass sie sich bereits auf dem Diagramm befand, als ich es startete, so dass es nicht initialisiert wurde und die Eigenschaftsänderungen nicht wussten, wo sie anzuwenden waren.

Vielen Dank an alle!

Hmmm, man kann wirklich nicht sofort erraten, wo der Hund ist :)

 

Demonstration eines Skripts mit Bitmap-Skalierung

In der Ex5-Datei befindet sich eine ziemlich große BMP-Datei als Ressource.


Dateien:
TestScaling.ex5  784 kb
 
Nikolai Semko:

Skript zur Rasterskalierung - Demonstration

Nein, es ist wirklich beeindruckend.

Sie müssen jedoch eine Art nützliches Add-on entwickeln, das die Vorteile all dieser Canvas-Funktionen nutzt.

Damit Ihre Entwicklungen nicht das gleiche Schicksal erleiden wie der CGA-Adapter - ein wunderbarer Grafikadapter, der von seinen Zeitgenossen missverstanden und unterschätzt wurde.

Ich selbst habe CGA immer als "lahm wie eh und je" angesehen, wenn es um acht Bit Commodore 64 oder Sinclair Spectrum ging. Aber vor kurzem stellte sich heraus, dass - einfach wegen der mangelnden Popularität - fast niemand alle Möglichkeiten dieser Karte genutzt hat. Und es gab fast keine Spiele, die mit Acht-Bit-Heimcomputern mithalten konnten.

Hätte IBM CGA gefördert, wäre diese Demo 1981 erschienen - CGA wäre viel populärer gewesen, und EGA wäre möglicherweise später veröffentlicht worden:


Wenn ich mir diesen Bildschirm ansehe, kann ich nicht glauben, dass dies auf einem alten CGA-Adapter mit seinem 16K-Videospeicher möglich ist, der an einen gewöhnlichen Haushaltsfernseher angeschlossen ist (ein RGB-Monitor ist dafür überhaupt nicht geeignet. Das war die Idee der Entwickler - höhere Textqualität auf einem RGB-Monitor, aber schlechte Farbpalette, aber reiche grafische Möglichkeiten mit schlecht lesbarem Text auf einem Haushaltsfernseher mit Composite-Eingang)

Grund der Beschwerde: