211 lines
5.7 KiB
MQL5
211 lines
5.7 KiB
MQL5
//+------------------------------------------------------------------+
| |||
//| CanvasSample.mq5 |
| |||
//| Copyright 2000-2025, MetaQuotes Ltd. |
| |||
//| https://www.mql5.com |
| |||
//+------------------------------------------------------------------+
| |||
#property copyright "Copyright 2000-2025, MetaQuotes Ltd."
| |||
#property link "https://www.mql5.com"
| |||
#property description "Demonstrating Canvas features"
| |||
//---
| |||
#include <Canvas\Canvas.mqh>
| |||
//+------------------------------------------------------------------+
| |||
//| inputs |
| |||
//+------------------------------------------------------------------+
| |||
input int Width=800;
| |||
input int Height=600;
| |||
//+------------------------------------------------------------------+
| |||
//| Script program start function |
| |||
//+------------------------------------------------------------------+
| |||
int OnStart(void)
| |||
{
| |||
int total=1024;
| |||
int limit=MathMax(Width,Height);
| |||
int x1,x2,x3,y1,y2,y3,r;
| |||
int x[],y[];
| |||
//--- check
| |||
if(Width<100 || Height<100)
| |||
{
| |||
Print("Too simple.");
| |||
return(-1);
| |||
}
| |||
//--- create canvas
| |||
CCanvas canvas;
| |||
if(!canvas.CreateBitmapLabel("SampleCanvas",0,0,Width,Height,COLOR_FORMAT_ARGB_RAW))
| |||
{
| |||
Print("Error creating canvas: ",GetLastError());
| |||
return(-1);
| |||
}
| |||
//--- deawing
| |||
canvas.Erase(XRGB(0x1F,0x1F,0x1F));
| |||
canvas.Update();
| |||
//--- start randomizer
| |||
srand(GetTickCount());
| |||
//--- draw pixels
| |||
for(int i=0;i<total && !IsStopped();i++)
| |||
{
| |||
x1=rand()%limit;
| |||
y1=rand()%limit;
| |||
canvas.PixelSet(x1,y1,RandomRGB());
| |||
canvas.Update();
| |||
}
| |||
//--- erase
| |||
canvas.Erase(XRGB(0x1F,0x1F,0x1F));
| |||
canvas.Update();
| |||
//--- draw horizontal/vertical lines
| |||
for(int i=0;i<total && !IsStopped();i++)
| |||
{
| |||
x1=rand()%limit;
| |||
x2=rand()%limit;
| |||
y1=rand()%limit;
| |||
y2=rand()%limit;
| |||
if(i%2==0)
| |||
canvas.LineHorizontal(x1,x2,y1,RandomRGB());
| |||
else
| |||
canvas.LineVertical(x1,y1,y2,RandomRGB());
| |||
canvas.Update();
| |||
}
| |||
//--- draw lines
| |||
for(int i=0;i<total && !IsStopped();i++)
| |||
{
| |||
x1=rand()%limit;
| |||
x2=rand()%limit;
| |||
y1=rand()%limit;
| |||
y2=rand()%limit;
| |||
canvas.Line(x1,y1,x2,y2,RandomRGB());
| |||
canvas.Update();
| |||
}
| |||
//--- erase
| |||
canvas.Erase(XRGB(0x1F,0x1F,0x1F));
| |||
canvas.Update();
| |||
//--- draw filled circles
| |||
for(int i=0;i<total && !IsStopped();i++)
| |||
{
| |||
x1=rand()%limit;
| |||
y1=rand()%limit;
| |||
r =rand()%limit;
| |||
canvas.FillCircle(x1,y1,r,RandomRGB());
| |||
canvas.Update();
| |||
}
| |||
//--- draw circles
| |||
for(int i=0;i<total && !IsStopped();i++)
| |||
{
| |||
x1=rand()%limit;
| |||
y1=rand()%limit;
| |||
r =rand()%limit;
| |||
canvas.Circle(x1,y1,r,RandomRGB());
| |||
canvas.Update();
| |||
}
| |||
//--- erase
| |||
canvas.Erase(XRGB(0x1F,0x1F,0x1F));
| |||
canvas.Update();
| |||
//--- draw filled rectangles
| |||
for(int i=0;i<total && !IsStopped();i++)
| |||
{
| |||
x1=rand()%limit;
| |||
y1=rand()%limit;
| |||
x2=rand()%limit;
| |||
y2=rand()%limit;
| |||
canvas.FillRectangle(x1,y1,x2,y2,RandomRGB());
| |||
canvas.Update();
| |||
}
| |||
//--- draw rectangles
| |||
for(int i=0;i<total && !IsStopped();i++)
| |||
{
| |||
x1=rand()%limit;
| |||
y1=rand()%limit;
| |||
x2=rand()%limit;
| |||
y2=rand()%limit;
| |||
canvas.Rectangle(x1,y1,x2,y2,RandomRGB());
| |||
canvas.Update();
| |||
}
| |||
//--- erase
| |||
canvas.Erase(XRGB(0x1F,0x1F,0x1F));
| |||
canvas.Update();
| |||
//--- draw filled triangles
| |||
for(int i=0;i<total && !IsStopped();i++)
| |||
{
| |||
x1=rand()%limit;
| |||
y1=rand()%limit;
| |||
x2=rand()%limit;
| |||
y2=rand()%limit;
| |||
x3=rand()%limit;
| |||
y3=rand()%limit;
| |||
canvas.FillTriangle(x1,y1,x2,y2,x3,y3,RandomRGB());
| |||
canvas.Update();
| |||
}
| |||
//--- draw triangles
| |||
for(int i=0;i<total && !IsStopped();i++)
| |||
{
| |||
x1=rand()%limit;
| |||
y1=rand()%limit;
| |||
x2=rand()%limit;
| |||
y2=rand()%limit;
| |||
x3=rand()%limit;
| |||
y3=rand()%limit;
| |||
canvas.Triangle(x1,y1,x2,y2,x3,y3,RandomRGB());
| |||
canvas.Update();
| |||
}
| |||
//--- erase
| |||
canvas.Erase(XRGB(0x1F,0x1F,0x1F));
| |||
canvas.Update();
| |||
//---
| |||
ArrayResize(x,10);
| |||
ArrayResize(y,10);
| |||
//--- draw polyline
| |||
for(int i=0;i<10;i++)
| |||
{
| |||
x[i]=rand()%Width;
| |||
y[i]=rand()%Height;
| |||
}
| |||
canvas.Polyline(x,y,RandomRGB());
| |||
canvas.Update();
| |||
//--- draw polygon
| |||
for(int i=0;i<10;i++)
| |||
{
| |||
x[i]=rand()%Width;
| |||
y[i]=rand()%Height;
| |||
}
| |||
canvas.Polygon(x,y,RandomRGB());
| |||
canvas.Update();
| |||
//--- filling
| |||
for(int i=0;i<total && !IsStopped();i++)
| |||
{
| |||
int xf=rand()%Width;
| |||
int yf=rand()%Height;
| |||
canvas.Fill(xf,yf,RandomRGB());
| |||
canvas.Update();
| |||
}
| |||
//--- erase
| |||
canvas.Erase(XRGB(0x1F,0x1F,0x1F));
| |||
canvas.Update();
| |||
//--- draw text
| |||
string text;
| |||
x1=Width/2;
| |||
y1=Height/2;
| |||
r =y1-50;
| |||
for(int i=0;i<8;i++)
| |||
{
| |||
double a=i*M_PI_4;
| |||
uint clr=RandomRGB();
| |||
int deg=(int)(180*a/M_PI);
| |||
x2=x1+(int)(r*cos(a));
| |||
y2=y1-(int)(r*sin(a));
| |||
canvas.LineAA(x1,y1,x2,y2,clr,STYLE_DASHDOTDOT);
| |||
text="Angle "+IntegerToString(deg);
| |||
canvas.FontSet(canvas.FontNameGet(),canvas.FontSizeGet(),canvas.FontFlagsGet(),10*deg);
| |||
canvas.TextOut(x2,y2,text,clr,TA_RIGHT|TA_BOTTOM);
| |||
canvas.Update();
| |||
}
| |||
//--- finish
| |||
ObjectDelete(0,"SampleCanvas");
| |||
canvas.Destroy();
| |||
return(0);
| |||
}
| |||
//+------------------------------------------------------------------+
| |||
//| Random RGB color |
| |||
//+------------------------------------------------------------------+
| |||
uint RandomRGB(void)
| |||
{
| |||
return(XRGB(rand()%255,rand()%255,rand()%255));
| |||
}
| |||
//+------------------------------------------------------------------+
|