Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Thank you!
Is this function not suitable?
Unfortunately not. It moves the bitmap object itself, I need a function that moves the content x points. I know that internally the memory consists of an x, y array but there is no memmove or something in mql. I don't know how to move the memory quickly.
Обычный режим, Николай.
Я обычно поступаю по следующей схеме:
Если это не работает в MT4, значит что-то не так с событием CHARTEVENT_CHART_CHANGE. Сейчас не проверить, пока нет котировок.
Я обычно поступаю по следующей схеме:
Если это не работает в MT4, значит что-то не так с событием CHARTEVENT_CHART_CHANGE. Сейчас не проверить, пока нет котировок.
Николай, чтобы Вы не тратили время я выше написал решение, которое решило мою проблему, а именно, как Вы верно заметили, следующий код вставленный в OnCalcucate():
Unfortunately not. It moves the bitmap object itself, I need a function that moves the content x points. I know that internally the memory consists of an x, y array but there is no memmove or something in mql. I don't know how to move the memory quickly.
I didn't get it, do you need to move the rectangular area inside the entire canvas?
Николай, чтобы Вы не тратили время я выше написал решение, которое решило мою проблему, а именно, как Вы верно заметили, следующий код вставленный в OnCalcucate():
В обычном нетестовом режиме так делать не надо, т.к. функция ChartChanged() будет выполняться два раза подряд, что не разумно. Ведь она выполняется при наступлении события CHARTEVENT_CHART_CHANGE внутри файла iCanvas.mqh.
Правильно перерисовку вашего канваса, привязанного к барам или времени осуществлять в OnChartEvent при наступлении события изменения окна ( CHARTEVENT_CHART_CHANGE) без использования ChartChanged().
Николай, чтобы Вы не тратили время я выше написал решение, которое решило мою проблему, а именно, как Вы верно заметили, следующий код вставленный в OnCalcucate():
Нужно принимать следующее во внимание:
Ваша проблема была из-за того, что OnCalculate выполняется по-видимому до выполнения OnChartEvent и поэтому ChartChanged() еще не отрабатывалась.
Поэтому целесообразно обработчик перерисовки осуществлять именно в OnChartEvent, а не в OnCalculate. Тем более это надо делать потому, что пользователь может изменить размеры окна в любой момент времени. За это все отвечает событие CHARTEVENT_CHART_CHANGE
I didn't get it, do you need to move the rectangular area inside the entire canvas?
Yes. Example: I draw a circle in the middle of the full screen canvas and want to move the circle to the left, but I don't want to delete the entire area and repaint the circle with every movement, but simply scroll the memory to the left.
The CCanvas is simply a x/y Array of points.
I mean a function which moves the m_pixels to the left, right, up, down.
Yes. Example: I draw a circle in the middle of the full screen canvas and want to move the circle to the left, but I don't want to delete the entire area and repaint the circle with every movement, but simply scroll the memory to the left.
The CCanvas is simply a x/y Array of points.
I mean a function which moves the m_pixels to the left, right, up, down.
Да, вполне обоснованное желание.
Тем более не сложно его реализовать.
Я об этом думал, но пришел к выводу, что если есть потребность к передвижению прямоюгольной части общего канваса, то существует более простой способ реализовать это:
Да, вполне обоснованное желание.
Тем более не сложно его реализовать.
Я об этом думал, но пришел к выводу, что если есть потребность к передвижению прямоюгольной части общего канваса, то существует более простой способ реализовать это:
That's not working because my Canvas is the fullscreen. It's like a tick chart but it cost too much time to erase the complete background and construcht and paint everything new so I need to move the content to the left (eg. 8 pixels) and draw only the new 8 pixels (8 px in x direction and full height) with new data. I tried to move the Canvas 8 px to the left with MoveCanvas and this is working but I can't resize it the way that from the left 8 px width are removed and on the right 8 px are added. I hope you understand...
на то, чтобы стереть весь фон, построить и нарисовать все новое, потребуется слишком много времени
Не так уже и много. Много может занять построение.
Держим состояние в памяти (положение элементов, их цвет и тд), если нужно, например, переместить элемент меняем его координаты, стираем холст и рисуем новое состояние. Визуально это выглядит молниеносно, даже с большим количеством элементов )