캔버스 멋지다! - 페이지 5

 

코드를 약간 변경했습니다. 두 개의 회전하는 중력 중심이 있었지만 지금은 4개가 있습니다.

 #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 :

코드를 약간 변경했습니다. 두 개의 회전하는 중력 중심이 있었지만 지금은 4개가 있습니다.


엄청난 !

고객이 고개를 돌리지 않도록 최면을 거는 것이 좋습니다.

손실에 주의를 기울이지만 단순히 과정 자체를 즐겼습니다.

 
Denis Sartakov :

엄청난 !

고객이 고개를 돌리지 않도록 최면을 거는 것이 좋습니다.

손실에 주의를 기울이지만 단순히 과정 자체를 즐겼습니다.

어떻게 이 최면에 걸리지 않을 수 있겠습니까? :)

그리고 동의해야 합니다. Canvas는 훌륭합니다!

와, 그랬던 것 같습니다. )))

 
Nikolai Semko :

코드를 약간 변경했습니다. 두 개의 회전하는 중력 중심이 있었지만 지금은 4개가 있습니다.

우리는 또한 "심기"에 대한 제안과 함께 25번째 프레임이 필요합니다.
 
Aleksey Ivanov :
우리는 또한 "심기"에 대한 제안과 함께 25번째 프레임이 필요합니다.
멋진 아이디어입니다. 오늘 할게요.
 
Aleksey Ivanov :
우리는 또한 "심기"에 대한 제안과 함께 25번째 프레임이 필요합니다.

만들어진.

파일:
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();

다음으로 10:00에 OnTick의 색상을 회색으로 변경하고 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에서 캔버스를 만듭니다.

다음으로 10:00에 OnTick의 색상을 회색으로 변경하고 11:00에 다시 원래 상태로 돌아가야 합니다.

작동하지 않음:

문제:

캔버스 및 프레임 색상을 변경하는 방법 - 개체 이름에 대한 바인딩이 없습니까?

고맙습니다!

Canvas.Rectangle은 객체가 아니라 픽셀 묶음을 그리는 명령입니다. 그것은 총알과 같습니다. 총알이 날아 당신의 이름을 기억하십시오. 의견은 안 받아요.

사유: