Discussion of article "Graphical Interfaces X: The Standard Chart Control (build 4)" - page 4

You are missing trading opportunities:
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
Registration
Log in
You agree to website policy and terms of use
If you do not have an account, please register
Very, very strange. In my implementation of the interface, I don't have a single call to the ChartRedraw() function.
Until now I didn't really know why it is needed.... I work with canvas (bitmap objects) without it.
When there are some doubts, you can trace this or that necessity by the developments of the standard library. For example, the CCanvas class.
//| Update object on screen (redraw)|
//+------------------------------------------------------------------+
void CCustomCanvas::Update(const bool redraw)
{
//--- check
if(m_rcname==NULL)
return;
//--- update resource and redraw
if(ResourceCreate(m_rcname,m_pixels,m_width,m_height,0,0,0,m_format) && redraw)
ChartRedraw();
}
//---
If you work without it, at some point you will encounter that something is not displayed at the most inopportune moment.
Konow tag:
Suppose ChartRedraw() function is necessary, - then every change of every object requires complete redrawing of all objects?
I don't know. The terminal system does that. You can try to ask MQ developers. )
When there are some doubts, you can trace this or that necessity through the developments of the standard library. For example, the CCanvas class.
//| Update object on screen (redraw)|
//+------------------------------------------------------------------+
void CCustomCanvas::Update(const bool redraw)
{
//--- check
if(m_rcname==NULL)
return;
//--- update resource and redraw
if(ResourceCreate(m_rcname,m_pixels,m_width,m_height,0,0,0,m_format) && redraw)
ChartRedraw();
}
//---
If you work without it, at some point you will face the fact that something is not displayed at the most inopportune moment.
I don't know. This is handled by the terminal system. You can try to ask the developers. )
In my technology there is no load associated with such things. Changes of objects are made point by point. ChartRedraw() is not called anywhere and there is no need in it. Therefore, this question should rather be asked to your developers).
I think that further optimisation of your library depends on solving the problem of redrawing the chart at each change of each object, which cannot but load the processor.
However, my advice to you is: don't be too fond of optimising the library code. It may lead to a global rethinking of the whole concept of your technology. )
In my technology there is no load associated with such things. Changes of objects are performed point by point. ChartRedraw() is not called anywhere and there is no need in it. Therefore, this question should rather be asked to your developers).
I think that further optimisation of your library depends on solving the problem of redrawing the chart at each change of each object, which cannot but load the processor.
Well, nobody else knows what environment you are testing in except you. If you haven't encountered any problems related to redrawing, you have everything ahead of you. I am sure of it, as I have already gone through it all long ago. Of course, you will keep silent about it because you are not going to show your code to anyone.
However, my advice to you is: don't be too fond of optimising the library code. It may lead to a global rethinking of the whole concept of your technology. )
Make sure you don't have to rethink the concept of your technology yourself. )
Well, nobody else knows, except you, in what environment you conduct your tests. If you haven't encountered any problems with redrawing, then you have everything ahead of you. I'm sure of that, because I've been through all this for a long time. Of course, you will keep silent about it because you are not going to show your code to anyone.
Just make sure that you don't have to revise the concept of your technology yourself. )
I really don't understand what you are talking about. You have seen my works. In their implementation, there are no problems with redrawing while there is no ChartRedrow() call in any place of the programme.
I don't know what code to show you to convince you. Tell me what to show you, I will show you.
Here is an example of the "localiser" function that I have implemented. (To prove that I don't just make things up).
{
static int Номер_окна,
Номер_последнего_объекта_в_окне,
Прежний_объект,
Прежнее_окно;
//-------------------
//////Alert(" All_open_windows ",All_open_windows);
//If at least one window is open, enter the loop to search for the window where the cursor is located.
//If no such windows are found and the loop interactions counter has reached the total number of windows, return -1,
//which means that the cursor is on the free space of the chart.
//Note: the array "window number in queue" is indexed from zero, and "counter of all open windows" counts from one.
//so the array cell number containing the window number according to the counter is always one less than the counter value.
if(Всех_открытых_окон > 0)
{
for(int b = 0; b <= Всех_открытых_окон; b++)
{//////Alert("Object_name_under_cursor() number of window search interactions b = ",b);
//If the number of interactions reaches the value of the window counter, it means that we have gone beyond the array where the numbers of these windows are stored,
//and therefore found no windows under the cursor.
if(b == Всех_открытых_окон)
{
Номер_окна = -1;
//There was a serious bug due to the lack of zeroing these variables when leaving the window zone. ---
//------------------------------
ОКНО = 0;
ОБЪЕКТ = 0;
ЭЛЕМЕНТ = 0;
ТИП_ЭЛЕМЕНТА = 0;
КАТЕГОРИЯ_ОБЪЕКТА = 0;
ПОДКАТЕГОРИЯ_ОБЪЕКТА = 0;
ПОДГРУППА_ОБЪЕКТА = 0;
КАТЕГОРИЯ_ЭЛЕМЕНТА = 0;
КООРДИНАТА_ОКНА_X = 0;
КООРДИНАТА_ОКНА_Y = 0;
ШИРИНА_ОКНА = 0;
ВЫСОТА_ОКНА = 0;
НИЖНЯЯ_ТОЧКА_ОКНА = 0;
ПРАВАЯ_ТОЧКА_ОКНА = 0;
//-------------------
ТИП_ОКНА = 0;
КАТЕГОРИЯ_ОКНА = 0;
ОКНО_ВСЕГДА_СВЕРХУ = 0;
ОКНО_ПРИКРЕПЛЕНО = 0;
МАТЕРИНСКОЕ_ОКНО = 0;
ЗОНА_ОКНА = 0;
РЕЖИМ_ОТОБРАЖЕНИЯ_ОКНА = 0;
КАТЕГОРИЯ_МАТЕРИНСКОГО_ОКНА = 0;
//------------------------------
НОМЕР_ВЫЗЫВАЕМОГО_ОБЪЕКТОМ_ОКНА = 0;
КАТЕГОРИЯ_ВЫЗЫВАЕМОГО_ОБЪЕКТОМ_ОКНА = 0;
СОБЫТИЕ_СМЕНЫ_СОСТОЯНИЙ_ЭЛЕМЕНТА = 0;
ТЕКУЩЕЕ_СОСТОЯНИЕ_ЭЛЕМЕНТА = 0;
ЭЛЕМЕНТ_АКТИВИРОВАН = 0;
КАНВАС = 0;
//---------------------
if(Иконка_ручки)
{
ObjectDelete(Иконка_ручки);
Иконка_ручки = 0;
}
// return(-1);
}/**/
//------------
//Check if the window is under the cursor.
if(
X > G_CORE[Номер_окна_в_очереди[b]][_MAIN_FRAME][_X]
&& X < G_CORE[Номер_окна_в_очереди[b]][_MAIN_FRAME][_X] + G_CORE[Номер_окна_в_очереди[b]][_MAIN_FRAME][_X_SIZE]
&& Y > G_CORE[Номер_окна_в_очереди[b]][_MAIN_FRAME][_Y]
&& Y < G_CORE[Номер_окна_в_очереди[b]][_MAIN_FRAME][_Y] + G_CORE[Номер_окна_в_очереди[b]][_MAIN_FRAME][_Y_SIZE]
)
{
//---------------------------
ОКНО = Номер_окна_в_очереди[b];
//---------------------------
ТИП_ОКНА = G_CORE[ОКНО][_W_Properties][_WINDOW_TYPE];
КАТЕГОРИЯ_ОКНА = G_CORE[ОКНО][_W_Properties][_WINDOW_CATEGORY];
ОКНО_ВСЕГДА_СВЕРХУ = G_CORE[ОКНО][_W_Properties][_WINDOW_ALWAYS_ON_TOP];
//------------------------------
КООРДИНАТА_ОКНА_X = G_CORE[ОКНО][_MAIN_FRAME][_X];
КООРДИНАТА_ОКНА_Y = G_CORE[ОКНО][_MAIN_FRAME][_Y];
ШИРИНА_ОКНА = G_CORE[ОКНО][_MAIN_FRAME][_X_SIZE];
ВЫСОТА_ОКНА = G_CORE[ОКНО][_MAIN_FRAME][_Y_SIZE];
НИЖНЯЯ_ТОЧКА_ОКНА = КООРДИНАТА_ОКНА_Y + ВЫСОТА_ОКНА;
ПРАВАЯ_ТОЧКА_ОКНА = КООРДИНАТА_ОКНА_X + ШИРИНА_ОКНА;
//------------------------------
ОКНО_ПРИКРЕПЛЕНО = G_CORE[ОКНО][_W_Properties][_WINDOW_BIND_TO_WINDOW_NUMBER];
МАТЕРИНСКОЕ_ОКНО = ОКНО_ПРИКРЕПЛЕНО;
КАТЕГОРИЯ_МАТЕРИНСКОГО_ОКНА = G_CORE[МАТЕРИНСКОЕ_ОКНО][_W_Properties][_WINDOW_CATEGORY];
ЗОНА_ОКНА = G_CORE[ОКНО][_W_Properties][_WINDOW_ZONE];
//------------------------------
РЕЖИМ_ОТОБРАЖЕНИЯ_ОКНА = G_CORE[ОКНО][_W_Properties][_WINDOW_CURRENT_SIZE_MODE];
//------------------------------
break;
}
}
//-----------------------------------------
if(Прежнее_окно != ОКНО)
{//////Alert("Window_number != WINDOW");
for(int d = 1; d < 500; d++)
{
if(G_CORE[ОКНО][d][_NAME] == 0)
{
Номер_последнего_объекта_в_окне = d - 1;
break;
}
}
// ////Alert("Number_last_object_in_window ",Number_last_object_in_window);// Previous_window = Window;
}
//--------------------------------------------------------------------------------------
//Start the cycle of searching for the object under the cursor from the last object of the window.
//Select the first matching object under the cursor and check if the time of its creation
// more recent than the last recorded creation time of any other object that is also located
//under the cursor and checked earlier, it is its number that the global variable OBJECT accepts.
//At the end of the loop, the last and latest object under the cursor remains in the OBJECT variable.
//This approach is necessary to determine not just the first object found under the cursor, but that object
//which may obscure the first object found, since it was redrawn on a handle or scroll event,
//but its number in the window is before the number of the object under the cursor, so if we break the loop,
//then we just won't get to it.
//---------------------------------------------------------------------------------------
int Последний_объект_под_курсором;
//--------------------------------------
for(int c = Номер_последнего_объекта_в_окне; c >= 1; c--)
{
if(
((G_CORE[ОКНО][c][_OBJ_TYPE] != Obj_Pixel && !G_CORE[ОКНО][c][_OBJECT_HIDE])
||(
G_CORE[ОКНО][c][_OBJ_TYPE] == Obj_Pixel
&& !G_CORE[ОКНО][c][_OBJECT_HIDE]
&& !G_CORE[ОКНО][G_CORE[ОКНО][c][_GROUP_MAIN_OBJECT]][_OBJECT_HIDE]
))
&& G_CORE[ОКНО][c][_OBJECT_CATEGORY] != _DEC //In place of this entry, make the property of the object to be invisible to the coordination function.
&& X > G_CORE[ОКНО][c][_X] && X < (G_CORE[ОКНО][c][_X] + G_CORE[ОКНО][c][_X_SIZE])
&& Y > G_CORE[ОКНО][c][_Y] && Y < (G_CORE[ОКНО][c][_Y] + G_CORE[ОКНО][c][_Y_SIZE])
)
{
if(c != 1)Последний_объект_под_курсором = c;
ОБЪЕКТ = c;
//---------------------------------------------------------------
//Set the focus of elements, objects, properties and parameters.
//---------------------------------------------------------------
ЭЛЕМЕНТ = G_CORE[ОКНО][ОБЪЕКТ] [_GROUP_MAIN_OBJECT];
КАНВАС = G_CORE[ОКНО][ОБЪЕКТ] [_DROWING_CANVAS];
ТИП_ЭЛЕМЕНТА = G_CORE[ОКНО][ЭЛЕМЕНТ][_OBJECT_GROUP];
КАТЕГОРИЯ_ОБЪЕКТА = G_CORE[ОКНО][ОБЪЕКТ] [_OBJECT_CATEGORY];
ПОДКАТЕГОРИЯ_ОБЪЕКТА = G_CORE[ОКНО][ОБЪЕКТ] [_OBJECT_SUBCATEGORY];
ПОДГРУППА_ОБЪЕКТА = G_CORE[ОКНО][ОБЪЕКТ] [_OBJECT_SUBGROUP];
КАТЕГОРИЯ_ЭЛЕМЕНТА = G_CORE[ОКНО][ЭЛЕМЕНТ][_OBJECT_CATEGORY];
//------------------------------
СОБЫТИЕ_СМЕНЫ_СОСТОЯНИЙ_ЭЛЕМЕНТА = G_CORE[ОКНО][ЭЛЕМЕНТ][_OBJECT_CHANGE_STATE_STANDART_EVENT];
ТЕКУЩЕЕ_СОСТОЯНИЕ_ЭЛЕМЕНТА = G_CORE[ОКНО][ЭЛЕМЕНТ][_CURRENT_STATE];
ЭЛЕМЕНТ_АКТИВИРОВАН = ТЕКУЩЕЕ_СОСТОЯНИЕ_ЭЛЕМЕНТА;
//------------------------------
НОМЕР_ВЫЗЫВАЕМОГО_ОБЪЕКТОМ_ОКНА = G_CORE[ОКНО][ОБЪЕКТ][_WON];
КАТЕГОРИЯ_ВЫЗЫВАЕМОГО_ОБЪЕКТОМ_ОКНА = G_CORE[НОМЕР_ВЫЗЫВАЕМОГО_ОБЪЕКТОМ_ОКНА][_W_Properties][_WINDOW_CATEGORY];
//------------------------------
_Имя_объекта_под_курсором = G_CORE[ОКНО][ОБЪЕКТ][_NAME];
//------------------------------
if(!G_CORE[ОКНО][c][_OBJECT_SCROLLED] && ОБЪЕКТ != _MAIN_FRAME)break;
//------------------------------
if(c == 1 && Последний_объект_под_курсором != 0)ОБЪЕКТ = Последний_объект_под_курсором;
if(c == 1 && Последний_объект_под_курсором == 0)ОБЪЕКТ = _MAIN_FRAME;
}
//---------------------------------------------------------------
}
///Alert("_Object_Name_under_Cursor ",_Object_Name_under_Cursor);
//-----------------------------------------
if(РЕЖИМ_ОТОБРАЖЕНИЯ_ОКНА != _MAXIMIZED_MODE)
{
int Тип_иконки = _NO_ICON;
//Верхний левый уголок-----------------------------------------
if(КАТЕГОРИЯ_ОБЪЕКТА == _OBJECT_CATEGORY_WINDOW_HANDLE || КАТЕГОРИЯ_ОБЪЕКТА == _OBJECT_CATEGORY_WINDOW_RESIZE_HANDLE)
{
//----------------------
if(ПОДКАТЕГОРИЯ_ОБЪЕКТА == _OBJECT_SUBCATEGORY_WINDOW_LEFT_HANDLE || ПОДКАТЕГОРИЯ_ОБЪЕКТА == _OBJECT_SUBCATEGORY_WINDOW_RIGHT_HANDLE)Тип_иконки = _RIGHT_n_LEFT_ARROW;
//-----------------------------------------
if(ПОДКАТЕГОРИЯ_ОБЪЕКТА == _OBJECT_SUBCATEGORY_WINDOW_BOTTOM_HANDLE)Тип_иконки = _UP_n_DOWN_ARROW;
//----------------------------
if(ПОДГРУППА_ОБЪЕКТА == _OBJECT_SUBCATEGORY_4_POINTS_TOOLBAR_HANDLE)Тип_иконки = _CROSSED_ARROWS;
//----------------------------
//Левый верхний уголок-----------------------------------------
if(X >= КООРДИНАТА_ОКНА_X && X <= КООРДИНАТА_ОКНА_X + 6 && Y >= КООРДИНАТА_ОКНА_Y && Y <= КООРДИНАТА_ОКНА_Y + 6)
{
Тип_иконки = _UP_LEFT_to_DOWN_RIGHT_ARROW;
ОБЪЕКТ = 400000;
}
//Левый нижний уголок-----------------------------------------
if(X >= КООРДИНАТА_ОКНА_X && (X <= КООРДИНАТА_ОКНА_X + 5) && Y >= (НИЖНЯЯ_ТОЧКА_ОКНА - 5) && Y <= НИЖНЯЯ_ТОЧКА_ОКНА)
{
Тип_иконки = _UP_RIGHT_to_DOWN_LEFT_ARROW;
ОБЪЕКТ = 500000;
}
//Правый верхний уголок-----------------------------------------
if(X >= (ПРАВАЯ_ТОЧКА_ОКНА - 5) && X <= ПРАВАЯ_ТОЧКА_ОКНА && Y >= КООРДИНАТА_ОКНА_Y && Y <= (КООРДИНАТА_ОКНА_Y + 5))
{
Тип_иконки = _UP_RIGHT_to_DOWN_LEFT_ARROW;
ОБЪЕКТ = 600000;
}
//Правый нижний уголок-----------------------------------------
if(X >= (ПРАВАЯ_ТОЧКА_ОКНА - 5) && X <= ПРАВАЯ_ТОЧКА_ОКНА && Y >= (НИЖНЯЯ_ТОЧКА_ОКНА - 5)&& Y <= НИЖНЯЯ_ТОЧКА_ОКНА)
{
Тип_иконки = _UP_LEFT_to_DOWN_RIGHT_ARROW;
ОБЪЕКТ = 700000;
}
//-----------------------------------------
if(X >= (КООРДИНАТА_ОКНА_X + 6) && X <= (ПРАВАЯ_ТОЧКА_ОКНА - 6) && Y >= КООРДИНАТА_ОКНА_Y && Y <= (КООРДИНАТА_ОКНА_Y + 6))
{
Тип_иконки = _UP_n_DOWN_ARROW;
ОБЪЕКТ = 800000;
}
//-----------------------------------------
if(ОКНО_ПРИКРЕПЛЕНО)
{
if(ЗОНА_ОКНА == 1 || ЗОНА_ОКНА == 10)
{
if((ПОДКАТЕГОРИЯ_ОБЪЕКТА == _OBJECT_SUBCATEGORY_WINDOW_LEFT_HANDLE || ПОДКАТЕГОРИЯ_ОБЪЕКТА == _OBJECT_SUBCATEGORY_WINDOW_RIGHT_HANDLE)
&& ((X >= КООРДИНАТА_ОКНА_X && X <= (КООРДИНАТА_ОКНА_X + 2)) || (X >= ((ПРАВАЯ_ТОЧКА_ОКНА) - 2) && X <= (ПРАВАЯ_ТОЧКА_ОКНА))))
{
Тип_иконки = _MULTI_HANDLE_LR;
}
}
//-----------------------------------------
if(ЗОНА_ОКНА == 6 || ЗОНА_ОКНА == 3)
{
if(ПОДКАТЕГОРИЯ_ОБЪЕКТА == _OBJECT_SUBCATEGORY_WINDOW_BOTTOM_HANDLE && ((Y >= (НИЖНЯЯ_ТОЧКА_ОКНА) - 2) && (Y <= (НИЖНЯЯ_ТОЧКА_ОКНА))))
{
Тип_иконки = _MULTI_HANDLE_UD;
}
}
//-----------------------------------------
if(ЗОНА_ОКНА == 7 || ЗОНА_ОКНА == 4)
{
if((ПОДКАТЕГОРИЯ_ОБЪЕКТА == _OBJECT_SUBCATEGORY_WINDOW_BOTTOM_HANDLE || ОБЪЕКТ == _STANDART_OBJECT_HEAD_DOWN_HANDLE)
&& (((Y >= (НИЖНЯЯ_ТОЧКА_ОКНА) - 2) && Y <= (НИЖНЯЯ_ТОЧКА_ОКНА)) ||(Y >= КООРДИНАТА_ОКНА_Y && Y <= (КООРДИНАТА_ОКНА_Y + 3))))
{
Тип_иконки = _MULTI_HANDLE_UD;
}
}
//-----------------------------------------
if(ЗОНА_ОКНА == 8 || ЗОНА_ОКНА == 5)
{
if(Y >= КООРДИНАТА_ОКНА_Y && Y <= (КООРДИНАТА_ОКНА_Y + 3))
{
Тип_иконки = _MULTI_HANDLE_UD;
}
}
}
//-----------------------------------------
//-----------------------------------------
if(Иконка_ручки != Тип_иконки && Тип_иконки != _NO_ICON)
{
ObjectDelete(Иконка_ручки);
Иконка_ручки = Тип_иконки;
Создать_иконку(Иконка_ручки);
}
Перемещать_иконку_за_курсором();
//------------------------------------------
}
if(Событие_Left_Click && Тип_иконки != _NO_ICON)Перемещение_окна = 1;
//------------------------------------------
if(Иконка_ручки && Тип_иконки == _NO_ICON)
{
ObjectDelete(Иконка_ручки);
Иконка_ручки = 0;
}
//-----------------------------
}
//Fix _OBJECT_DISAPPOINTED and _OBJECT_POINTED events, and if the object has a script for these events,
//call the object behaviour block to implement it.
//-----------------------------------------------------
if(Прежний_объект != ОБЪЕКТ)
{
int Номер_вызываемого_окна_прежнего_объекта = G_CORE[Прежнее_окно][Прежний_объект][_OBJECT_OPEN_CLOSE_WINDOW_FUNCTION];
int Категория_вызываемого_окна_прежнего_объекта = G_CORE[Номер_вызываемого_окна_прежнего_объекта][_W_Properties][_WINDOW_CATEGORY];
int Номер_вызываемого_окна = G_CORE[ОКНО][ОБЪЕКТ][_OBJECT_OPEN_CLOSE_WINDOW_FUNCTION];
int Категория_вызываемого_окна = G_CORE[Номер_вызываемого_окна][_W_Properties][_WINDOW_CATEGORY];
int Сценарий_DISAPPOINTED_прежнего_объекта = G_CORE[Прежнее_окно][Прежний_объект][_OBJECT_DISAPPOINTED];
int Тип_элемента_прежнего_объекта = G_CORE[Прежнее_окно][Прежний_объект][_OBJECT_GROUP];
//---------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------
//Realise the behaviour of main menu windows when the "Open_window_menu" flag is set ---------------------------
//If the new object under the cursor is a main menu tab, close the menu windows of the previous tab and open the menu of this tab.
//The block implements sequential opening and closing of menu windows when the cursor moves through the main menu tabs.
//-------------------------------------------------------------------------------------------------------------
if(Открыто_окно_меню)
{//////Alert(OBJECT);
//---------------
if(
Открыто_окно[Номер_вызываемого_окна_прежнего_объекта]
&& Категория_вызываемого_окна_прежнего_объекта == _CONTEXT_MENU
&& ОКНО != Номер_вызываемого_окна_прежнего_объекта
)
{
Явление_окон(_CONTEXT_MENU_WINDOWS_TOTAL_CLOSE,_CONTEXT_MENU);
}
//---------------
//////Alert("Called_window_number ",Called_window_number, " Called_window_category ",Called_window_category);
//----------------------------------------------------------------------------------------------------------
if(Категория_вызываемого_окна == _MAIN_MENU && !Открыто_окно[Номер_вызываемого_окна])
{
Явление_окон(_MAIN_MENU_WINDOWS_TOTAL_CLOSE,_MAIN_MENU);
Явление_окон(_WINDOW_OPEN,Номер_вызываемого_окна);
}
//---------------
if(Категория_вызываемого_окна == _CONTEXT_MENU && !Открыто_окно[Номер_вызываемого_окна])
{
Явление_окон(_WINDOW_OPEN,Номер_вызываемого_окна);
}
//---------------
}
//-----------------------------------------------
СОБЫТИЕ = _OBJECT_DISAPPOINTED;
//-----------------------------------------------
if(Сценарий_DISAPPOINTED_прежнего_объекта)
{
if(!((Тип_элемента_прежнего_объекта == _TAB || Тип_элемента_прежнего_объекта == _MENU_ITEM) && Открыто_окно[Номер_вызываемого_окна_прежнего_объекта]))
{
Поведение_объектов(_STOPABLE_SINGLE_PLAY_MODE,_OBJECT_DISAPPOINTED, Прежнее_окно,Прежний_объект);
}
//--------------------------
if(Открыто_окно[_TOOLTIP_WINDOW])Закрыть_окно_Tooltip();
//--------------------------
}
//---------------------------------------------------------
СОБЫТИЕ = _OBJECT_POINTED;
//---------------------------------------------------------
if(G_CORE[ОКНО][ОБЪЕКТ][_OBJECT_POINTED])
{
if(!((ТИП_ЭЛЕМЕНТА == _TAB || ТИП_ЭЛЕМЕНТА == _MENU_ITEM) && Открыто_окно[НОМЕР_ВЫЗЫВАЕМОГО_ОБЪЕКТОМ_ОКНА]))
{
Поведение_объектов(_STOPABLE_SINGLE_PLAY_MODE,_OBJECT_POINTED);
}
//--------------------------
if(G_CORE[ОКНО][ОБЪЕКТ][_TOOLTIP_TEXT])Открыть_окно_Tooltip();
}
//--------------------------
//--------------------------------------------------------------------------------------------------------------
Прежний_объект = ОБЪЕКТ;
Прежнее_окно = ОКНО;
//--------------------------
}
}
}
I really don't know what you're talking about. You have seen my work. In their implementation, there are no problems with redrawing, even though there is no call to ChartRedrow() at any point in the programme.
What I've seen in your work doesn't fit into any gates at all. Besides, from what you have demonstrated we can draw a clear conclusion that you are testing only in MetaTrader 4.
Retag Konow:
I don't know what code to show you to convince you. Tell me what to show you, I will show it to you.
You should not show it to me, but to those you are going to sell it to. I don't want to test something I wouldn't use in my own development. First, bring everything to an acceptable level and provide a detailed description of the capabilities of your developments, at least as it is done in my case. After that we can draw conclusions about what you are doing.
Here is an example of the "localiser" function that I have implemented. (To prove that I'm not just making stuff up).
Unfortunately, that doesn't tell me anything. Everything is learnt by testing and comparing different methods. I will see when you present the first version of your library in demo mode. Of course, I won't buy anything. )
You are getting off topic. You can criticise my work, but you can't say that it slows down. (Strange criticism: "no way").
I am not going to sell you anything personally, but to give you a try to use it - yes.
What you call my "library" is not really a library. It is a closed and self-sufficient mechanism to which you cannot connect someone else's code and which you cannot connect to your own code.
Now I am constructively criticising your solutions, giving my own solutions as an example. If you do not need it, the discussion is over.
You're getting off topic. You can criticise my works, but you can't say that they are slow. (Strange criticism: "no way").
Then don't divert from the subject. From my topic, which I have described in detail in several dozens of articles. What does this have to do with your closed and inaccessible technologies, which you constantly advertise in advance, before putting them on sale?
I am not saying that you have something slowing down. What I mean is that you don't know whether it's slowing down or not. You can say anything. Where are the files for tests? And where is it slowing down/not slowing down? In MetaTrader 4/5? In Windows 7/8/10? That is the question. )
Konow Retag:
It's a closed and self-sufficient mechanism that you can't plug in someone else's code and can't plug in your own code.
I'm sure that's its biggest disadvantage. Again, self-sufficient for whom? Only for you? It's too early to make such statements for everyone. And it will be self-sufficient for others only when those who will use it tell you about it.
Retag Konow:
Now I am constructively criticising your solutions by giving my own solutions as an example. If you don't need it, then the discussion is over.
It is of course very interesting and useful. Especially for you and for other newcomers. By asking questions and getting answers to them, you help others to acquire new knowledge too.
But your criticism without providing any material to confirm your statements is not constructive.
Thank you.
1. Well, then don't divert from the topic. From my topic, which I have described in detail in several dozen articles. What does this have to do with your closed and inaccessible technologies, which you constantly advertise in advance, before putting them on sale?
2. I do not claim that you have something slowing down. What I mean is that you don't know whether it is slowing down or not. You can say anything. Where are the test files? And where is it slowing down/not slowing down? In MetaTrader 4/5? In Windows 7/8/10? That is the question. )
3. I'm sure that's its biggest disadvantage. Again, self-sufficient for whom ? Only for you? It is too early to make such statements for everyone. And it will be self-sufficient for others only when those who will use it tell you so.
4. It is certainly very interesting and useful. Especially for you and for other newcomers. By asking questions and getting answers to them, you help others to acquire new knowledge too.
5. But your criticism without providing any material to support your assertions is not constructive.
6. Thank you.
1. unnecessary...
2. The fact that my implementation does not slow down can be seen in the video.
3. redundant...
4. That's correct. That's why I'm debating with you. From my point of view, your solution of redrawing the entire graph on the event of each object is not efficient and causes additional load on the processor. Optimisation depends on solving this problem correctly. I don't have ChartRedrow() function call (take your word for it please), and the interface doesn't slow down (you can see it on the video) and everything that needs to be updated.
Hence my suggestion: Don't use constant redrawing of the chart, as you can do without it.
5. Proof that my claims are justified is my word that I don't use ChartRedrow() and the video where you can see the result of getting around without this function.
6. And thank you.