La toile est cool ! - page 5

 

J'ai légèrement modifié le code. Il y avait deux centres de gravité tournants, il y en a maintenant quatre.

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

J'ai légèrement modifié le code. Il y avait deux centres de gravité tournants, il y en a maintenant quatre.


Super !

C'est bien d'hypnotiser les clients pour qu'ils ne paient pas.

les pertes et profiter du processus.

 
Denis Sartakov:

Super !

Il est bon d'hypnotiser les clients pour qu'ils ne paient pas

Le meilleur moyen est d'hypnotiser les clients pour qu'ils ne fassent pas attention aux pertes et qu'ils apprécient simplement le processus.

Je ne veux pas tomber sous cette hypnose moi-même. :)

Et je dois être d'accord, Canvas est cool !

Wow, je pense que je l'ai. ))))

 
Nikolai Semko:

J'ai légèrement modifié le code. Il y avait deux centres de gravité tournants, il y en a maintenant quatre.

Il me faut un vingt-cinquième cadre avec une suggestion de "plante" - "achetez tel robot, achetez tel robot..." - alors ce sera un développement super précieux !
 
Aleksey Ivanov:
Il faut aussi y mettre un vingt-cinquième cadre avec une offre "à planter" - "achetez tel robot, achetez tel robot...", alors, du tout, un développement super précieux sortira !
C'est une bonne idée. Je vais le faire aujourd'hui.
 
Aleksey Ivanov:
Il faut un vingt-cinquième cadre avec une offre "végétale" - "achetez tel robot, achetez tel robot..." - alors ce sera un développement super valorisant !

C'est fait.

Dossiers :
LSD25.mq5  6 kb
 
Nikolai Semko:

C'est fait.

Bien joué ! Vous irez loin !

 

Dans OnInit, je crée un canevas

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

Ensuite, je dois changer la couleur à 10:00 en gris dans OnTick et la remettre dans son état d'origine à 11:00.

Ça ne marche pas :

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

Question :

Comment changer la couleur du canevas et du cadre - aucune référence aux noms d'objets ?

Merci !

 
Vitaly Muzichenko:

Dans OnInit, je crée un canevas

Ensuite, je dois changer la couleur à 10:00 en gris dans OnTick et la remettre dans son état d'origine à 11:00.

Ça ne marche pas :

Question :

Comment changer la couleur du canevas et du cadre - aucune référence aux noms d'objets ?

Merci !

Le canvas.Rectangle n'est pas un objet, c'est une commande pour dessiner un tas de pixels. C'est comme un coup de feu - une balle part, et bon débarras. Il n'y a pas de retour d'information.

 

Il existe un article qui explore la classe CCanvas. L'implémentation de la transparence des objets graphiques, il devrait y avoir une solution là.