Все-таки мне нужна будет переменная "st" не только в Alert, но и для вычислений, а при компиляции выходит предупреждение "возможна потеря данных из-за преобразованию типов".
Предполагаю, потому, что получается 10 значное число, а в int максимальное значение 2 147 483 647, у меня на данный момент получается 1 380 758 400. Может имеет смысл использовать long и наверное советник будет в этой части будет потреблять много ресурсов?
Не ужели Вы принцип приведения типов так и не поняли? Это же так просто:
Хочу рисовать в эксперте на canvas. Чтобы картинка на холсте перерисовалась в OnInit, OnTimer, OnTick и в onChartEvent. Я объявляю CCanvas canvas в глобальных переменных и вызываю canvas.методы везде где мне надо. Но компилятор ругается на такое глобальное объявление unresolved static variable 'CCanvas::m_default_colors' (и при чём тут colors?)
код примерно такой
#include <Canvas\Canvas.mqh>
CCanvas canvas;
int OnInit() { //CCanvas canvas; если объявить тут - то рисует, но как тогда перерисовать в OnTick?
Хочу рисовать в эксперте на canvas. Чтобы картинка на холсте перерисовалась в OnInit, OnTimer, OnTick и в onChartEvent. Я объявляю CCanvas canvas в глобальных переменных и вызываю canvas.методы везде где мне надо. Но компилятор ругается на такое глобальное объявление unresolved
...
Как договориться с компилятором? Есть пример с canvas в эксперте?
Код вот он. Но в нём же копаться гораздо хуже. И он не работает. Ошибка unresolved static variable 'CCanvas::m_default_colors' ProbeGraph.mq5 21 9
И куча варнингов по поводу перекрытия переменных heigth и width. В общем насколько я понял компилятор не хочет вызывать конструктор класса CCanvas в глобальных переменных, а хочет вызвать конструктор в OnInit. И как тогда обращаться к экземпляру класса за пределами OnInit я не понимаю.
Ещё. раньше тело функции Draw было внутри onInit, а самой Draw не было. Всё работало, но внутри OnInit. Это я тут уже извращаться начал, пытаясь передать ссылку на экземпляр класса в функцию Draw, так как через глобальные переменные не получается.
В общем код в процессе написания, проблема с созданием глобального экземпляра класса CCanvas.
//+------------------------------------------------------------------+//| ProbeGraph.mq5 |//| Copyright 2013, MetaQuotes Software Corp. |//| http://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2013, MetaQuotes Software Corp."#property link"http://www.mql5.com"#property version"1.00"#include <Canvas\Canvas.mqh>
int heigth=500;
int width=500;
int Xcentr=round(width/2);
int Ycentr=round(width/2);
int Rmin=25;
int Rmax=round(heigth/2-1);
#define ArrayS 100000double arrayopen[ArrayS];
CCanvas canvas;
//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
//CCanvas canvas;
canvas.CreateBitmapLabel("ProbeGraph",0,0,width,heigth,COLOR_FORMAT_ARGB_RAW);
//Draw(canvas);//--- create timerEventSetTimer(60);
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//--- destroy timerEventKillTimer();
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick()
{
//---//canvas.Update();
}
//+------------------------------------------------------------------+//| Timer function |//+------------------------------------------------------------------+voidOnTimer()
{
//---
}
//+------------------------------------------------------------------+//| ChartEvent function |//+------------------------------------------------------------------+voidOnChartEvent(constint id,
constlong &lparam,
constdouble &dparam,
conststring &sparam)
{
//---
}
//+------------------------------------------------------------------+int ChartVisibleBars(constlong chart_ID=0)
{
//--- подготовим переменную для получения значения свойстваlong result=-1;
//--- сбросим значение ошибкиResetLastError();
//--- получим значение свойстваif(!ChartGetInteger(chart_ID,CHART_VISIBLE_BARS,0,result))
{
//--- выведем сообщение об ошибке в журнал "Эксперты"Print(__FUNCTION__+", Error Code = ",GetLastError());
}
//--- вернем значение свойства графикаreturn((int)result);
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+void Draw(CCanvas *canvas)
{
ArrayInitialize(arrayopen,0);
double r;
double A, Amin=0, Amax=2*3.1415;
int x,y, xprev=0, yprev=0;
//canvas.Erase(ColorToARGB(clrRed, 115));
canvas.Circle(Xcentr,Ycentr,Rmin,ColorToARGB(clrBlue, 115));
canvas.Circle(Xcentr,Ycentr,Rmax,ColorToARGB(clrBlue, 115));
int Nbars=CopyOpen(Symbol(),Period(),TimeCurrent(),ChartVisibleBars(0),arrayopen); Print("Nbars=",Nbars);
double KursMin=1000000,KursMax=0;
for(int i=0; i<Nbars; i++)
{
if(KursMin>arrayopen[i]) KursMin=arrayopen[i];
if(KursMax<arrayopen[i]) KursMax=arrayopen[i];
};
Print("KursMin=",KursMin); Print("KurMax=",KursMax);
for(int i=0; i<Nbars; i++)
{
if((KursMax-KursMin)>0) r=Rmin+(Rmax-Rmin)*(arrayopen[i]-KursMin)/(KursMax-KursMin);
if(Nbars>0) A=Amin+(Amax-Amin)*i/(Nbars);
x=round(Xcentr-r*MathSin(A));
y=round(Ycentr+r*MathCos(A));
canvas.PixelSetAA(x,y,ColorToARGB(clrGreen,155));
if(xprev>0 && yprev>0) canvas.Line(xprev,yprev,x,y,ColorToARGB(clrBlue,155));
xprev=x; yprev=y;
};
canvas.Update();
}
//+------------------------------------------------------------------+
Все-таки мне нужна будет переменная "st" не только в Alert, но и для вычислений, а при компиляции выходит предупреждение "возможна потеря данных из-за преобразованию типов".
Предполагаю, потому, что получается 10 значное число, а в int максимальное значение 2 147 483 647, у меня на данный момент получается 1 380 758 400. Может имеет смысл использовать long и наверное советник будет в этой части будет потреблять много ресурсов?
Не ужели Вы принцип приведения типов так и не поняли? Это же так просто:
Хочу рисовать в эксперте на canvas. Чтобы картинка на холсте перерисовалась в OnInit, OnTimer, OnTick и в onChartEvent. Я объявляю CCanvas canvas в глобальных переменных и вызываю canvas.методы везде где мне надо. Но компилятор ругается на такое глобальное объявление unresolved static variable 'CCanvas::m_default_colors' (и при чём тут colors?)
код примерно такой
#include <Canvas\Canvas.mqh>
CCanvas canvas;
int OnInit()
{
//CCanvas canvas; если объявить тут - то рисует, но как тогда перерисовать в OnTick?
canvas.CreateBitmapLabel("ProbeGraph", 0, 0, width ,heigth, COLOR_FORMAT_ARGB_RAW);
canvas.Circle(Xcentr,Ycentr,Rmin,ColorToARGB(clrBlue, 115)); canvas.Update();
}
void OnTick()
Как договориться с компилятором? Есть пример с canvas в эксперте?{
canvas.Circle(Xcentr,Ycentr,Rmin,ColorToARGB(clrBlue, 115)); canvas.Update();
}
Хочу рисовать в эксперте на canvas. Чтобы картинка на холсте перерисовалась в OnInit, OnTimer, OnTick и в onChartEvent. Я объявляю CCanvas canvas в глобальных переменных и вызываю canvas.методы везде где мне надо. Но компилятор ругается на такое глобальное объявление unresolved
...
Как договориться с компилятором? Есть пример с canvas в эксперте?Ну Вы же не новичёк! Опубликуйте код правильно!
Ну Вы же не новичёк! Опубликуйте код правильно!
Код вот он. Но в нём же копаться гораздо хуже. И он не работает. Ошибка unresolved static variable 'CCanvas::m_default_colors' ProbeGraph.mq5 21 9
И куча варнингов по поводу перекрытия переменных heigth и width. В общем насколько я понял компилятор не хочет вызывать конструктор класса CCanvas в глобальных переменных, а хочет вызвать конструктор в OnInit. И как тогда обращаться к экземпляру класса за пределами OnInit я не понимаю.
Ещё. раньше тело функции Draw было внутри onInit, а самой Draw не было. Всё работало, но внутри OnInit. Это я тут уже извращаться начал, пытаясь передать ссылку на экземпляр класса в функцию Draw, так как через глобальные переменные не получается.
В общем код в процессе написания, проблема с созданием глобального экземпляра класса CCanvas.
Я вот одного понять не могу: если компилятор ругается - почему ошибки не исправляются? А?
Я вот одного понять не могу: если компилятор ругается - почему ошибки не исправляются? А?
Скопировал предложенный код полностью. Ошибка та же самая что и была unresolved static variable 'CCanvas::m_default_colors' prob1.mq5 21 9
У меня нет никаких ошибок. Билд последний.
Скопировал предложенный код полностью. Ошибка та же самая что и была unresolved static variable 'CCanvas::m_default_colors' prob1.mq5 21 9