帆布很酷! - 页 5

 

稍微修改了一下代码。以前有两个旋转的重力中心,现在有四个。

#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();
  }
//+------------------------------------------------------------------+
附加的文件:
LSD.mq5  4 kb
 
Nikolai Semko:

稍微修改了一下代码。以前有两个旋转的重力中心,现在有四个。


很好!

对客户进行催眠是好事,这样他们就不会付钱了

损失,只是享受这个过程。

 
Denis Sartakov:

很好!

对客户进行催眠是好事,这样他们就不会支付

最好的方法是对客户进行催眠,让他们不注意损失,而只是享受这个过程。

我不想自己落入这种催眠状态。:)

我不得不同意,画布是很好的。

哇,我想我已经得到了它。))))

 
Nikolai Semko:

稍微修改了一下代码。以前有两个旋转的重力中心,现在有四个。

我需要一个带有 "植物 "建议的第二十五帧--"买这样那样的机器人,买这样那样的机器人......" --那么它将是一个超级有价值的发展!
 
Aleksey Ivanov:
你还应该在那里放一个第二十五格,提出 "种植"--"买这样那样的机器人,买这样那样的机器人......",那么,在所有,一个超级有价值的发展会出来
这是个很酷的主意。我今天就去做。
 
Aleksey Ivanov:
你需要一个带有 "工厂 "报价的第二十五帧--"购买这样那样的机器人,购买这样那样的机器人......"--那么它将是一个超级有价值的发展!

完成了。

附加的文件:
LSD25.mq5  6 kb
 
Nikolai Semko:

完成了。

好样的!你会走得很远的!

 

在OnInit中,我创建了一个画布

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

然后我需要在OnTick中把10:00的颜色改为灰色,并在11:00再次恢复到原来的状态。

它不起作用。

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

问题。

如何改变画布和框架的颜色--不参考对象名称?

谢谢你!

 
Vitaly Muzichenko:

在OnInit中,我创建了一个画布

然后我需要在OnTick中把10:00的颜色改为灰色,并在11:00再次恢复到原来的状态。

它不起作用。

问题。

如何改变画布和框架的颜色--不参考对象名称?

谢谢!

canvas.Rectangle不是一个对象,它是一个画一堆像素的命令。这就像一声枪响--一颗子弹打出去,就好办了。没有反馈。

 

有一篇文章探讨了CCanvas类。实现图形对象的透明度,那里应该有一个解决方案。