Leinwand ist cool! - Seite 5

 

Der Code wurde geringfügig geändert. Es gab zwei rotierende Gravitationszentren, jetzt sind es vier.

#include <Canvas\Canvas.mqh>

void OnStart()
  {
   ChartSetInteger(0,CHART_FOREGROUND,true);
   CCanvas C;
   int Width=(ushort)ChartGetInteger(0,CHART_WIDTH_IN_PIXELS);                               // получаем Ширину окна
   int Height=(ushort)ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS);                             // получаем Высоту окна
   if(!C.CreateBitmapLabel(0,0,"CanvasExamlple",0,0,Width,Height,COLOR_FORMAT_XRGB_NOALPHA)) // создаем канвас размером текущего окна
   Print("Error creating canvas: ",GetLastError()); 
   uint i=0,j=100000;
   int size=Width*Height;
   uchar h[25600];
   for (int w=0;w<25600;w++) 
   h[w]= uchar(128+128*sin(double(w)/256));//создаем массив для ускорения работы
   double X1=0,Y1=0,X2=0,Y2=0,X3=0,Y3=0,X4=0,Y4=0;
   while(!IsStopped())
     {
      int pos=int(i%size);
      if(pos==0)
        {
         C.Update();
         //Sleep(30);
         X1= Width/2-(sin((double)j/100)*(double)Width/2);
         Y1= Height/2-(cos((double)j/140)*(double)Height/2);
         X2= Width/2+(cos((double)j/80)*(double)Width/2);
         Y2= Height/2+(sin((double)j/20)*(double)Height/2);
         X3= Width/2+(cos((double)j/85)*(double)Width/2);
         Y3= Height/2+(sin((double)j/65)*(double)Height/2);
         X4= Width/2+(cos((double)j/152)*(double)Width/2);
         Y4= Height/2+(sin((double)j/42)*(double)Height/2);
         j++;
        }
      int X=pos%Width;
      int Y=int(pos/Width);
      double D1=sqrt((X1-X)*(X1-X)+(Y1-Y)*(Y1-Y));
      double D2=sqrt((X2-X)*(X2-X)+(Y2-Y)*(Y2-Y));
      double D3=sqrt((X3-X)*(X3-X)+(Y3-Y)*(Y3-Y));
      double D4=sqrt((X4-X)*(X4-X)+(Y4-Y)*(Y4-Y));
      double d= (D1+D2)/(D1+D2+D3+D4);
      //C.m_pixels[pos]=XRGB(h[int(d*11520)],h[int(d*17920)],h[int(d*6400)]); // чуть быстрее работает, но требует переноса в Canvas.mqh массива m_pixels из protected в public
      C.PixelSet(X,Y,XRGB(h[int(d*11520)],h[int(d*17920)],h[int(d*6400)]));
      i++;
     }
   C.Destroy();
  }
//+------------------------------------------------------------------+
Dateien:
LSD.mq5  4 kb
 
Nikolai Semko:

Der Code wurde geringfügig geändert. Es gab zwei rotierende Gravitationszentren, jetzt sind es vier.


Großartig!

Es ist gut, Kunden zu hypnotisieren, damit sie nicht zahlen.

die Verluste und genießen Sie einfach den Prozess.

 
Denis Sartakov:

großartig!

Es ist gut, Kunden zu hypnotisieren, damit sie nicht zahlen.

Am besten ist es, die Kunden so zu hypnotisieren, dass sie nicht auf die Verluste achten, sondern den Prozess einfach genießen.

Ich möchte nicht selbst unter diese Hypnose fallen. :)

Und ich muss zustimmen, Canvas ist cool!

Wow, ich glaube, ich hab's. ))))

 
Nikolai Semko:

Der Code wurde geringfügig geändert. Es gab zwei rotierende Gravitationszentren, jetzt sind es vier.

Ich brauche einen fünfundzwanzigsten Rahmen mit einem "Pflanzen"-Vorschlag - "kaufe diesen und jenen Roboter, kaufe diesen und jenen Roboter..." - dann wird es eine super-wertvolle Entwicklung sein!
 
Aleksey Ivanov:
Sie sollten dort auch einen fünfundzwanzigsten Rahmen mit einem Angebot "zum Anpflanzen" aufstellen - "kaufen Sie diesen und jenen Roboter, kaufen Sie diesen und jenen Roboter...", dann wird überhaupt eine super-wertvolle Entwicklung herauskommen!
Das ist eine coole Idee. Ich werde es heute tun.
 
Aleksey Ivanov:
Man braucht einen fünfundzwanzigsten Rahmen mit einem "Pflanzen"-Angebot - "kaufe diesen und jenen Roboter, kaufe diesen und jenen Roboter..." - dann wird es eine super-wertvolle Entwicklung sein!

Erledigt.

Dateien:
LSD25.mq5  6 kb
 
Nikolai Semko:

Erledigt.

Gut gemacht! Du wirst es weit bringen!

 

In OnInit erstelle ich eine Leinwand

   canvas.CreateBitmapLabel(prefix+"bg",1,17,WidthBg,HeightBg,COLOR_FORMAT_ARGB_NORMALIZE);
   ObjectSetInteger(0,prefix+"bg",OBJPROP_SELECTABLE,true);
   ObjectSetInteger(0,prefix+"bg",OBJPROP_SELECTED,true);
   ObjectSetInteger(0,prefix+"bg",OBJPROP_COLOR,clrNONE);
   canvas.Erase(ColorToARGB(C'221,219,219',200)); // цвет фона
   canvas.Rectangle(0,0,canvas.Width()-1,canvas.Height()-1,ColorToARGB(clrGray));// Рамка
   canvas.Update();

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:

   if(Flag) {
    // Перекрашиваем фон
      canvas.Erase(ColorToARGB(C'221,219,219',200));
      canvas.Rectangle(0,0,canvas.Width()-1,canvas.Height()-1,ColorToARGB(clrDarkOliveGreen));// Рамка
      canvas.Update();
   } else { 
    // Возвращаем фон в нормальный цвет
      canvas.Erase(ColorToARGB(ResultColor,200));
      canvas.Rectangle(0,0,canvas.Width()-1,canvas.Height()-1,ColorToARGB(clrGray));// Рамка
      canvas.Update();
   }

Frage:

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

Ich danke Ihnen!

 
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?

Danke!

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