De toute façon, je suis fatigué de vous l'expliquer. Ceux qui le veulent comprendront.
Merci de votre patience, puisque c'est un phénomène normal, je vais le savoir maintenant et en tenir compte lors de l'analyse des erreurs dans mon code. Mais j'aimerais qu'ils laissent tomber une erreur - c'est une chose quand c'est impossible et une autre quand, appelons ça une particularité plutôt qu'une erreur, c'est-à-dire quand la particularité est expliquée par une tradition établie.
Merci de votre patience, puisque c'est un phénomène normal, je vais le savoir maintenant et en tenir compte lors de l'analyse des erreurs dans mon code. Mais j'aimerais qu'ils laissent tomber une erreur - c'est une chose quand ce n'est pas possible, et une autre quand, appelons cela une particularité plutôt qu'une erreur, donc quand une particularité est expliquée par une tradition établie.
N'oubliez pas une chose : le _LastError contient non seulement le code de l'erreur réelle mais aussi les codes des messages sur le fonctionnement de la fonction. Dans le cas qui nous occupe, c'est le code qu'il n'y a pas d'objet à cet endroit. Et tout dépend du contexte, dans lequel un objet portant un certain nom est demandé. Si c'est pour modifier l'objet, ce code indiquera la nécessité de comprendre pourquoi mon objet a soudainement disparu et si c'est pour créer un nouvel objet, le code indiquant qu'un tel objet n'existe pas - ici, c'est tout le contraire - tout va bien et vous pouvez le créer.
Et prenez-le comme une règle : vérifiez le résultat du retour de la fonction et, si elle renvoie une erreur réelle, analysez le code d'erreur.
Dans votre exemple, vous vous faites des illusions sur le fait que la création de l'objet canvas a réussi et vous pensez qu'il y a une erreur quelque part.
N'oubliez pas une chose : _LastError contient non seulement le code de l'erreur réelle, mais aussi les codes des messages de fonction. Dans ce cas, c'est le code qu'il n'y a pas d'objet. Et tout dépend du contexte, lorsque l'objet avec un nom spécifique est demandé. Si c'est pour modifier l'objet, ce code indiquera la nécessité de comprendre pourquoi mon objet a soudainement disparu et si c'est pour créer un nouvel objet, le code indiquant qu'un tel objet n'existe pas - ici, c'est tout le contraire - tout va bien et vous pouvez le créer.
Et prenez-le comme une règle : vous devez vérifier le résultat du retour de la fonction et si elle renvoie une erreur réelle, alors analysez le code d'erreur.
Vous perturbez votre exemple en disant qu'il y a eu une création réussie d'un objet cantvas et vous pensez qu'il y a une erreur quelque part.
Ok, je vais essayer de penser de la manière que vous avez décrite en analysant les erreurs. Merci.
Peut-être pouvez-vous donner une réponse aux questions que j'ai posées dans ce fil de discussion et qui sont restées sans réponse - sur la modification de la taille de la légende et l'interdiction de placer des informations sur la courbe créée dans cette légende ?
OK, j'essaierai de penser comme vous l'avez décrit en analysant les erreurs. Merci.
Peut-être pouvez-vous répondre aux questions que j'ai posées dans ce fil de discussion et qui sont restées sans réponse - concernant le redimensionnement de la légende et le fait de ne pas autoriser les informations sur la courbe créée dans cette légende ?
Je ne peux pas - ça prend du temps. Je suis désolé, je n'ai pas le temps.
OK, j'essaierai de penser comme vous l'avez décrit en analysant les erreurs. Merci.
Réinitialiser le code d'erreur - ResetLastError()
Appelé une fonction.
Assurez-vous de voir ce qu'il a rendu.
Si elle renvoie exactement une erreur (code d'erreur de la fonction, voir l'aide pour cette fonction particulière)
Vous spécifiez la nature exacte de l'erreur avec GetLastError().
Regardez dans votre code s'il ne doit pas y avoir une telle chose dans le programme ou...
Dans la logique de votre programme, réagissez à cette erreur, si cela est prévu dans la logique du programme (par exemple, des arrêts erronés)
...
...
etc. ...
Si elle renvoie un résultat, qui n'est pas une erreur, mais une simple réponse à une question
Vous faites ce qui est dans la logique du programme et ne regardez pas le code de la dernière erreur, parce qu'il y a seulement une réponse à votre requête à la fonction, pas une description de l'erreur.
quelque chose d'autre que je n'arrive pas à trouver...
Je ne peux pas - ça prend du temps. Hélas, je ne l'ai pas, désolé.
Compris. J'attendrai quelqu'un qui sait ou qui a le temps. Mais je comprends que vous ne puissiez pas le faire avec les outils habituels de la bibliothèque.
//--- 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));
Devrait êtrem_y.Color() etm_x.Color() au lieu de sélectionné, respectivement.
Résolu en héritant de CGraphic et en surchargeant CreateAxes (virtuel, Dieu merci).
Pourquoi la ligne horizontale n'est-elle pas dessinée sur le graphique? Pourquoi les coordonnées sont-elles de type int au lieu de double ?
//+------------------------------------------------------------------+//| 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);
}
De toute façon, je suis fatigué de vous l'expliquer. Ceux qui le veulent comprendront.
Merci de votre patience, puisque c'est un phénomène normal, je vais le savoir maintenant et en tenir compte lors de l'analyse des erreurs dans mon code. Mais j'aimerais qu'ils laissent tomber une erreur - c'est une chose quand c'est impossible et une autre quand, appelons ça une particularité plutôt qu'une erreur, c'est-à-dire quand la particularité est expliquée par une tradition établie.
Indique ce code -D.PointsFill(false);
L'erreur était due à la différence de taille des tableaux X et Y - pourquoi vous n'avez pas pu l'écrire dans le journal est un mystère.
Merci de votre patience, puisque c'est un phénomène normal, je vais le savoir maintenant et en tenir compte lors de l'analyse des erreurs dans mon code. Mais j'aimerais qu'ils laissent tomber une erreur - c'est une chose quand ce n'est pas possible, et une autre quand, appelons cela une particularité plutôt qu'une erreur, donc quand une particularité est expliquée par une tradition établie.
N'oubliez pas une chose : le _LastError contient non seulement le code de l'erreur réelle mais aussi les codes des messages sur le fonctionnement de la fonction. Dans le cas qui nous occupe, c'est le code qu'il n'y a pas d'objet à cet endroit. Et tout dépend du contexte, dans lequel un objet portant un certain nom est demandé. Si c'est pour modifier l'objet, ce code indiquera la nécessité de comprendre pourquoi mon objet a soudainement disparu et si c'est pour créer un nouvel objet, le code indiquant qu'un tel objet n'existe pas - ici, c'est tout le contraire - tout va bien et vous pouvez le créer.
Et prenez-le comme une règle : vérifiez le résultat du retour de la fonction et, si elle renvoie une erreur réelle, analysez le code d'erreur.
Dans votre exemple, vous vous faites des illusions sur le fait que la création de l'objet canvas a réussi et vous pensez qu'il y a une erreur quelque part.
N'oubliez pas une chose : _LastError contient non seulement le code de l'erreur réelle, mais aussi les codes des messages de fonction. Dans ce cas, c'est le code qu'il n'y a pas d'objet. Et tout dépend du contexte, lorsque l'objet avec un nom spécifique est demandé. Si c'est pour modifier l'objet, ce code indiquera la nécessité de comprendre pourquoi mon objet a soudainement disparu et si c'est pour créer un nouvel objet, le code indiquant qu'un tel objet n'existe pas - ici, c'est tout le contraire - tout va bien et vous pouvez le créer.
Et prenez-le comme une règle : vous devez vérifier le résultat du retour de la fonction et si elle renvoie une erreur réelle, alors analysez le code d'erreur.
Vous perturbez votre exemple en disant qu'il y a eu une création réussie d'un objet cantvas et vous pensez qu'il y a une erreur quelque part.
Ok, je vais essayer de penser de la manière que vous avez décrite en analysant les erreurs. Merci.
Peut-être pouvez-vous donner une réponse aux questions que j'ai posées dans ce fil de discussion et qui sont restées sans réponse - sur la modification de la taille de la légende et l'interdiction de placer des informations sur la courbe créée dans cette légende ?
OK, j'essaierai de penser comme vous l'avez décrit en analysant les erreurs. Merci.
Peut-être pouvez-vous répondre aux questions que j'ai posées dans ce fil de discussion et qui sont restées sans réponse - concernant le redimensionnement de la légende et le fait de ne pas autoriser les informations sur la courbe créée dans cette légende ?
Je ne peux pas - ça prend du temps. Je suis désolé, je n'ai pas le temps.
OK, j'essaierai de penser comme vous l'avez décrit en analysant les erreurs. Merci.
Je ne peux pas - ça prend du temps. Hélas, je ne l'ai pas, désolé.
Compris. J'attendrai quelqu'un qui sait ou qui a le temps. Mais je comprends que vous ne puissiez pas le faire avec les outils habituels de la bibliothèque.
Erreur dansCGraphic::CreateAxes :
Devrait êtrem_y.Color() etm_x.Color() au lieu de sélectionné, respectivement.
Résolu en héritant de CGraphic et en surchargeant CreateAxes (virtuel, Dieu merci).
Le mêmeCGraphic::CreateAxes utilisem_grid.clr_frame, qui ne peut pas être défini indépendamment:
Une méthode doit être ajoutée pour définir la valeur :
Pourquoi la ligne horizontale n'est-elle pas dessinée sur le graphique? Pourquoi les coordonnées sont-elles de type int au lieu de double ?