//--- draw mark and set y valueint yi_width=m_canvas.TextWidth(yvalue);
m_canvas.TextOut(m_left-yi_width-m_mark_size-m_gap,m_yc[i]-yh/2,yvalue,ColorToARGB(clrBlack),TA_LEFT);
if(m_mark_size>0.0)
m_canvas.LineHorizontal(x1,x2,m_yc[i],ColorToARGB(clrBlack));
...
//--- draw mark and set y value
m_canvas.TextOut(m_xc[i]-xw/2,y2+m_gap,xvalue,ColorToARGB(clrBlack));
if(m_mark_size>0.0)
m_canvas.LineVertical(m_xc[i],y1,y2,ColorToARGB(clrBlack));
//+------------------------------------------------------------------+//| Test_CLine.mq5 |//| Copyright 2016, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2016, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"#property script_show_inputs#include <Graphics\Graphic.mqh>
#include <Graphics\Axis.mqh>
inputint pix_X=800;//Ширина графика балансаinputint pix_Y=400;//Высота графика балансаinputbool Use_Koef=true;//Использовать коэфициент для установки ширины графика Parallelinputdouble Point_Kx=0.5;//Коэффициент ширины графика Parallelinputint Point_K=12;//Размер шрифта//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
Save_Graf_P();
}
//+------------------------------------------------------------------+void Save_Graf_P()
{
int pixx_Y=pix_Y;
int pixx_X=pix_X;
//--- отключим показ ценового графикаChartSetInteger(0,CHART_SHOW,false);
long chart=0;
string NameGraf="Test Line";
CGraphic graphicL;
if(ObjectFind(chart,NameGraf)<0)
{
graphicL.Create(chart,NameGraf,0,0,0,pixx_X,pixx_Y);//Создает графический ресурс, привязанный к объекту чарта
}
graphicL.Attach(chart,NameGraf);//Получить/создать графический ресурс и привязать его к экземпляру класса CGraphic
graphicL.BackgroundMain(NameGraf);//Получить/установить текст заголовка графика
graphicL.BackgroundMainSize(16);//Получить/установить размер шрифта заголовка
graphicL.HistoryNameSize(Point_K);//Устанавливает размер шрифта имени кривой
graphicL.HistorySymbolSize(Point_K);//Получить/установить размер символов условных обозначений
graphicL.LineAdd(-5,10,5,10,ColorToARGB(Blue,255),POINT_HORIZONTAL_DASH);//Создает и добавляет линию на график
graphicL.CurvePlotAll();//Отрисовывает все ранее созданные кривые
graphicL.Update();//Отображает на экране сделанные измененияResetLastError();
Sleep(3000);
graphicL.Destroy();//Удаляет с чарта график и уничтожает графический ресурс.ChartSetInteger(0,CHART_SHOW,true);
}
とにかく、説明するのに疲れました。欲しい人は、きっとわかってくれる。
お待たせしました、これは正常な現象なので、これから知って、自分のコードのエラーを分析するときに考慮します。でも、エラーはやめて ほしいですね。不可能なことと、エラーではなく特殊性とでも言いましょうか、その特殊性が確立された伝統によって説明されることは別物ですからね。
このコードへのポイント -D.PointsFill(false);
X配列と Y配列のサイズが 違うことがエラーの原因だったのですが、なぜログに書けなかったのか謎です。
お待たせしました、正常な現象なので、これから知って、自分のコードのエラーを分析するときに考慮します。でも、エラーはやめてほしいですね。不可能なことと、エラーではなく特殊性とでも言いましょうか、特殊性が確立された伝統によって説明されることは別物ですからね。
ひとつだけ覚えておいてほしいのは、_LastErrorには実際のエラーのコードだけでなく、関数の操作に関するメッセージのコードも含まれているということです。今回議論しているケースでは、そこにオブジェクトがないというコードです。そして、すべては、ある名前のオブジェクトが要求されるコンテキストに依存します。オブジェクトを修正するためのコードであれば、なぜ私のオブジェクトが突然なくなったのかを理解する必要があることを示し、新しいオブジェクトを作成するためのコードであれば、そのようなオブジェクトは存在しないと言うでしょう。
そして、関数の戻り結果を確認し、もし本当にエラーを返したら、エラーコードを分析する、ということをルールとしてください。
あなたの例では、canvasオブジェクトの作成が 成功したことで、どこかでエラーが発生していると思い、自分をごまかしているのです。
ひとつだけ覚えておいてほしいのは、_LastErrorには実際のエラーのコードだけでなく、関数メッセージのコードも含まれるということです。この場合、オブジェクトが存在しないことを示すコードです。そして、すべては、ある名前のオブジェクトが要求されるコンテキストに依存します。オブジェクトを変更する場合、このコードは、なぜ私のオブジェクトが突然なくなったのかを理解する必要性を示し、新しいオブジェクトを作成する場合、そのようなオブジェクトは存在しないと言うコードになります。
そして、関数の戻り結果を確認し、本当にエラーを返した場合は、エラーコードを解析することをルールとしてください。
cantvasオブジェクトの作成に 成功したというのに、どこかに間違いがあるとか言って、例を台無しにしていますね。
なるほど、エラーを分析するときは、おっしゃるような方法で考えてみます。ありがとうございます。
このスレッドで私がした質問(凡例の大きさの変更と、作成したカーブに関する情報をこの凡例に載せることの禁止)に対する答えを教えていただけないでしょうか。
なるほど、エラーを分析するときは、おっしゃるとおりに考えるようにします。ありがとうございます。
このスレッドで私がした質問、つまり凡例のサイズを変更することと、この凡例で作成されたカーブに関する情報を許可しないことについて、答えられないまま放置されているのですが、もしかしたらあなたは答えを出すことができるかもしれません。
できないんです。時間がかかるんです。すみません、時間がないんです。
なるほど、エラーを分析するときは、おっしゃるとおりに考えてみることにします。ありがとうございます。
できないんです。時間がかかるんです。残念ながら、持っていないんです、ごめんなさい。
了解しました。知っている人、時間のある人を待ちます。でも、ライブラリの正規のツールではできないんですね。
CGraphic::CreateAxesで エラーが発生しました。
それぞれ selected ではなくm_y.Color(),m_x.Color() とすること。
CGraphicを継承してCreateAxesをオーバーライドすることで解決(バーチャルでよかった)。
同じCGraphic::CreateAxesでもm_grid.clr_frameを 使用するので、単独で設定することはできません。
値を設定するためのメソッドを追加する必要があります。
グラフに水平線が 引かれていないのはなぜですか?座標がdouble型ではなくint型になっているのはなぜですか?