キャンバスがカッコいい! - ページ 5

 

コードを若干変更しました。回転する重心は2つでしたが、今は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:

コードを若干変更しました。回転する重心は2つでしたが、今は4つになっています。


素晴らしい

お客さんがお金を払わないように催眠術をかけるのはいいことだ

その過程を楽しむことです。

 
Denis Sartakov:

すごい

クライアントがお金を払わないように催眠術をかけるのは良いことです。

一番良い方法は、お客様に催眠術をかけて、損得を意識させず、ただそのプロセスを楽しんでもらうことです。

自分もこの催眠術にかかりたくはない。:)

そして、CANVASはカッコイイ!というのが私の感想です。

わ、わかったような気がします )))

 
Nikolai Semko:

コードを若干変更しました。回転する重心は2つでしたが、今は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();

そして、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クラスについて 解説した記事があります。グラフィカルなオブジェクトの透過性を実装 すること、そこに解決策があるはずです。

理由: