A lona é legal! - página 5

 

Ligeiramente mudou o código. Havia dois centros de gravidade rotativos, agora são quatro.

#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();
  }
//+------------------------------------------------------------------+
Arquivos anexados:
LSD.mq5  4 kb
 
Nikolai Semko:

Ligeiramente mudou o código. Havia dois centros de gravidade rotativos, agora são quatro.


Ótimo!

É bom hipnotizar os clientes para que eles não paguem

as perdas e apenas desfrutar do processo.

 
Denis Sartakov:

ótimo!

É bom hipnotizar os clientes para que eles não paguem

A melhor maneira é hipnotizar os clientes para que eles não prestem atenção às perdas e apenas aproveitem o processo.

Eu mesmo não quero cair nessa hipnose. :)

E eu tenho que concordar, Canvas é legal!

Uau, acho que consegui. ))))

 
Nikolai Semko:

Ligeiramente mudou o código. Havia dois centros de gravidade rotativos, agora são quatro.

Eu preciso de um vigésimo quinto quadro com uma sugestão de "planta" - "compre um robô de sucção, compre um robô de sucção..." - então será um desenvolvimento super-valoroso!
 
Aleksey Ivanov:
Você também deve colocar ali um vigésimo quinto quadro com uma oferta "para plantar" - "compre um robô de sucção, compre um robô de sucção...", então, um desenvolvimento super-valoroso sairá!
Essa é uma idéia legal. Vou fazer isso hoje.
 
Aleksey Ivanov:
Você precisa de um vigésimo quinto quadro com uma oferta "planta" - "compre um robô de sucção, compre um robô de sucção..." - então será um desenvolvimento super-valorizável!

Feito.

Arquivos anexados:
LSD25.mq5  6 kb
 
Nikolai Semko:

Feito.

Muito bom! Você irá longe!

 

No OnInit eu crio uma lona

   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();

Depois preciso mudar a cor às 10:00 para cinza em OnTick e devolvê-la ao estado original novamente às 11:00.

Não funciona:

   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();
   }

Pergunta:

Como posso mudar a cor da tela e da moldura - sem referência a nomes de objetos?

Obrigado!

 
Vitaly Muzichenko:

No OnInit eu crio uma lona

Depois preciso mudar a cor às 10:00 para cinza em OnTick e devolvê-la ao estado original novamente às 11:00.

Não funciona:

Pergunta:

Como posso mudar a cor da tela e da moldura - sem referência a nomes de objetos?

Obrigado!

O retângulo não é um objeto, é um comando para desenhar um monte de pixels. É como um tiro - uma bala dispara, e uma boa viagem. Não há feedback.