A lona é legal! - página 24

 
Rafil Nurmukhametov:

Oi@Nikolai Semko, você poderia me dizer se é possível fazer um objeto transparente sobre texto em uma camada de tela, veja a foto? O segundo círculo transparente é a segunda camada, este objeto não é um problema para eu fazer transparente.

Mais uma pergunta, como inserir uma imagem em uma camada de tela ou devo colocá-la como uma camada adicional? Sei que é um recurso, mas não consigo colocá-lo para funcionar, você pode me mostrar uma amostra de código?

Se a transparência (COLOR_FORMAT_ARGB_NORMALIZE) for utilizada, a transparência de duas camadas tr1 e tr2 deve ser misturada por fórmula

double tr=tr1+tr2-tr1*tr2; // где tr, tr1, tr1 меняются от нуля (абсолютная прозрачность) до 1(абсолютная непрозрачность) 

Exemplo de um roteiro com círculos aleatórios de cores e transparência aleatória:


#include <Canvas\iCanvas.mqh> //https://www.mql5.com/ru/code/22164
#define  Num 100
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
// инициализация случайных окружностей
   uint X[Num],Y[Num],sr[Num],clr[Num],Rmin[Num],Rmax[Num];
   double sx[Num],sy[Num];
   for(int i=0; i<Num; i++)
     {
      X[i]=rand()%3141;
      Y[i]=rand()%3141;
      sr[i]=rand()%3141;
      sx[i]=0.3+0.7*(double)rand()/32767.0;
      sy[i]=0.3+0.7*(double)rand()/32767.0;
      clr[i]=ARGB(rand()%256,rand()%256,rand()%256,rand()%256);
      int r2=5+rand()%100;
      int r1=5+rand()%100;
      Rmin[i]=(int)fmin(r1,r2);
      Rmax[i]=(int)fmax(r1,r2);
     }
// формирование изображения из Num (= 100) полупрозрачных кругов
   double j=0;
   while(!IsStopped())
     {
      Canvas.Erase();
      Canvas.CurentFont("Arial",30);
      Canvas.TextPosY=100;
      Canvas.Comm("Hello World!");
      for(int i=0; i<Num; i++)
        {
         Circle(W.Width/2*(1+sin((X[i]+sx[i]*j)*M_PI/1000)),
                W.Height/2*(1+sin((Y[i]+sy[i]*j)*M_PI/1000)),
                Rmin[i]+double(Rmax[i]-Rmin[i])/2*(1.0+cos((j+sr[i])*M_PI/1000)),clr[i]);
        }
      Canvas.Update();
      j+=0.3;
      Sleep(30);
     }
  }
//+------------------------------------------------------------------+

void Circle(double x,double y,double r,uint clr) 
  {
   double R2=r*r;
   for(int X=Round(x-r); X <=Round(x+r);X++)
      for(int Y=Round(y-r); Y<=Round(y+r);Y++)
         if(((x-X)*(x-X)+(y-Y)*(y-Y))<=R2) Canvas.PixelSet(X,Y,MixColor(clr,Canvas.PixelGet(X,Y)));
  }
//+------------------------------------------------------------------+

uint MixColor(uint clr,uint clrback)// смешиваем цвет и прозрачность clr c цветом и прозрачностью фона clrback
  {
   argb C,Bg;
   if(clrback==0) return clr;
   C.clr=clr;
   if(C.c[3]==255) return clr;
   Bg.clr=clrback;
   double tr=C.c[3]/255.0;
   double trb=Bg.c[3]/255.0;

   C.c[2]=uchar(Bg.c[2]+tr*(C.c[2]-Bg.c[2]));
   C.c[1]=uchar(Bg.c[1]+tr*(C.c[1]-Bg.c[1]));
   C.c[0]=uchar(Bg.c[0]+tr*(C.c[0]-Bg.c[0]));

   C.c[3]=uchar((trb+tr-trb*tr)*255.0+0.49999);
   return C.clr;
  }
//+------------------------------------------------------------------+
Arquivos anexados:
 
Rafil Nurmukhametov:

@Nikolai Semko

Tenho mais uma pergunta: como inserir uma imagem em uma camada de tela ou devo colocá-la como uma camada adicional? Entendo que de alguma forma através de um recurso, mas não consigo obter nada, você pode me mostrar um exemplo de código?

Você pode ver como trabalhar com fotos aqui .
Afinal, uma imagem é a mesma que um conjunto de pontos.
Este exemplo mostra como converter recursos de dois arquivos bmp em arrays BMP1[], BMP2[] e trabalhar com estes arrays em uma única tela.

 
Muito obrigado Nikolai, finalmente consegui resolver isso.
 
Rafil Nurmukhametov:
Muito obrigado Nikolai, finalmente consegui resolver isso.

Seja bem-vindo.

 

Primeiras experiências com o cronograma dinâmico.

EURUSD toda a história em dinâmica:

.

A fractalidade é evidente.
 
Nikolai Semko:

Primeiras experiências com o cronograma dinâmico.

EURUSD toda a história em dinâmica:

.

A fractalidade é evidente.
Vi seu posto em inglês.
Favor postar mais em inglês, incl. CodaBase (seu material é muito popular lá).
Para informações.
 
Sergey Golubev:
Vi seu posto em inglês.
Quero pedir-lhe que poste mais na parte em inglês, incluindo KodaBase (seu material é muito popular lá).
Apenas para informações.
Obrigado. Farei o meu melhor.
Entretanto, pareceu-me que na parte de língua inglesa do fórum, a reação às minhas mensagens foi próxima de zero. A sensação o tempo todo é que "silenciosamente para mim mesmo...".
 
Nikolai Semko:

Primeiras experiências com o cronograma dinâmico.

EURUSD toda a história em dinâmica:

.

A fractalidade é evidente.
Muito bem feito!
 
Ótimo!
 
Nikolai Semko:

Primeiras experiências com o cronograma dinâmico.

EURUSD toda a história em dinâmica:

.

A fractalidade é evidente.

Bastante visual, interessante.

Podemos visualizar os carrapatos também desta maneira?