Tuval harika! - sayfa 5

 

Kodu biraz değiştirdi. Dönen iki yerçekimi merkezi vardı, şimdi 4 tane var.

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

Kodu biraz değiştirdi. Dönen iki yerçekimi merkezi vardı, şimdi 4 tane var.


İyi !

müşterileri hipnotize etmek iyidir, böylece dönmezler

kayıplara dikkat, ancak sürecin kendisinden zevk aldı.

 
Denis Sartakov :

İyi !

müşterileri hipnotize etmek iyidir, böylece dönmezler

kayıplara dikkat, ancak sürecin kendisinden zevk aldı.

İnsan bu hipnozun altına nasıl düşmez. :)

Ve kabul etmeliyim ki, Canvas harika!

Vay, olmuş gibi görünüyor. )))

 
Nikolai Semko :

Kodu biraz değiştirdi. Dönen iki yerçekimi merkezi vardı, şimdi 4 tane var.

Ayrıca orada yirmi beşinci çerçeveye "dikmek" - "böyle bir robot satın al, böyle bir robot satın al ..." önerisiyle ihtiyacımız var, o zaman genel olarak süper değerli bir gelişme ortaya çıkacak!
 
Aleksey Ivanov :
Ayrıca orada yirmi beşinci çerçeveye "dikmek" - "böyle bir robot satın al, böyle bir robot satın al ..." önerisiyle ihtiyacımız var, o zaman genel olarak süper değerli bir gelişme ortaya çıkacak!
İyi fikir. Bugün yapacağım.
 
Aleksey Ivanov :
Ayrıca orada yirmi beşinci çerçeveye "dikmek" - "böyle bir robot satın al, böyle bir robot satın al ..." önerisiyle ihtiyacımız var, o zaman genel olarak süper değerli bir gelişme ortaya çıkacak!

Yapılmış.

Dosyalar:
LSD25.mq5  6 kb
 
Nikolai Semko :

Yapılmış.

Sınıf! Uzaklara gideceksin!

 

OnInit'te bir tuval oluşturuyorum

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

Ardından, OnTick'teki rengi 10:00'da griye değiştirmeniz ve 11:00'de tekrar orijinal durumuna döndürmeniz gerekir.

Çalışmıyor:

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

Soru:

Tuval ve çerçeve rengi nasıl değiştirilir - nesne adlarına bağlanma yok mu?

Teşekkür ederim!

 
Vitaly Muzichenko :

OnInit'te bir tuval oluşturuyorum

Ardından, OnTick'teki rengi 10:00'da griye değiştirmeniz ve 11:00'de tekrar orijinal durumuna döndürmeniz gerekir.

Çalışmıyor:

Soru:

Tuval ve çerçeve rengi nasıl değiştirilir - nesne adlarına bağlanma yok mu?

Teşekkür ederim!

canvas.Rectangle bir nesne değil, bir grup piksel çizme komutudur. Bir atış gibi - bir mermi uçtu ve adınızı hatırlayın. Geribildirim yok.

Neden: