Анатолий, прошу прощения за навязчивость, но хотелось бы знать каким образом возможно обновлять прогресс-бар внутри цикла с тяжёлыми вычислениями.
Например, имеем прогресс-бар m_progress_bar, имеем цикл внутри CProgram
Мог бы пояснить на таком "абстрактом" примере что я не понимаю?
Наверное эти тяжёлые вычисления такие долгие, что программа никак не может выйти из функции Func() ? Поэтому прогресс-бар не обновляется? Может быть там вечный цикл?
m_progress_bar.Show(); // бессмысленно, так как он и так виден сразу при показе окна (m_window.Show()), к которому он привязан,// а хотелось бы создавать его в скрытом состоянии, и показывать тогда, когда он необходим
Для управления видимостью у каждого элемента есть методы Show() и Hide().
m_progress_bar.Hide(); // не скрывает почему-то прогресс-бар, приходится скрывать его под иным граф. объектом
А ещё лучше приложить минимальный код для воспроизведения. Это наиболее быстрый способ получить подсказку. Для воспроизведения достаточно простой схемы:
Главное окно с кнопкой.
Диалоговое окно, к которому присоединёны два элемента: (1) кнопка и (2) изначально скрытый (сразу после создания) прогресс-бар.
Кнопка на главном окне открывает диалоговое окно. Кнопка на диалоговом окне запускает "тяжеловесные расчёты".
Наверное эти тяжёлые вычисления такие долгие, что программа никак не может выйти из функции Func() ? Поэтому прогресс-бар не обновляется? Может быть там вечный цикл?
Для управления видимостью у каждого элемента есть методы Show() и Hide().
Да, Анатоль, в твоих примерах работает, естественно. Но в них ведь лишь пример, бутафория. Прогресс-бар, пример его обновления, выполнен в таймере с абстрактными величинами.
Когда начинаю делать не в таймере с гипотетическими величинами, а в обычном длительном цикле внутри программы, а не таймера, то прогресс-бар не обновляется во время цикла, Он показывается уже обновлённым при повторном его показе.
Тебе не сложно привести пример работы с индикатором выполнения в основной программе в каком-нибудь цикле? Например в таком:
Да, Анатоль, в твоих примерах работает, естественно. Но в них ведь лишь пример, бутафория. Прогресс-бар, пример его обновления, выполнен в таймере с абстрактными величинами.
Когда начинаю делать не в таймере с гипотетическими величинами, а в обычном длительном цикле внутри программы, а не таймера, то прогресс-бар не обновляется во время цикла, Он показывается уже обновлённым при повторном его показе.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Почему?
Декларируй ТИПЫ данных вначале программы, а после - инициируй значения переменных объявленных тобою типов.
m_progress_bar.Update(i,total); вообще ни о чем. Какого размера столбик она показать должна?
Декларируй ТИПЫ данных вначале программы, а после - инициируй значения переменных объявленных тобою типов.
...
m_progress_bar.Update(i,total); вообще ни о чем. Какого размера столбик она показать должна?
double new_width=(m_current_index/m_steps_total)*m_bar_bg.XSize();вот такого ...вот такого ...
1. Декларация типа данных.
2. Присвоение значения переменной этого типа.
Если не складывается, значит - что-нибудь перепутал.
Правила входа в помещение:
1. Граната.
2. Автомат.
3. Я.
Главное - не перепутать.
1. Декларация типа данных.
2. Присвоение значения переменной этого типа.
Если не складывается, значит - что-нибудь перепутал.
Правила входа в помещение:
1. Граната.
2. Автомат.
3. Я.
Главное - не перепутать.
Наверное твои слова слишком мудрёные для моего неокрепшего после отпуска разума...
Зачем зюйд-зюйд-вест?
Анатолий, прошу прощения за навязчивость, но хотелось бы знать каким образом возможно обновлять прогресс-бар внутри цикла с тяжёлыми вычислениями.
Например, имеем прогресс-бар m_progress_bar, имеем цикл внутри CProgram
Мог бы пояснить на таком "абстрактом" примере что я не понимаю?
Наверное эти тяжёлые вычисления такие долгие, что программа никак не может выйти из функции Func() ? Поэтому прогресс-бар не обновляется? Может быть там вечный цикл?
Для управления видимостью у каждого элемента есть методы Show() и Hide().
m_progress_bar.Hide(); // не скрывает почему-то прогресс-бар, приходится скрывать его под иным граф. объектом//---
В общем, сложно что-то сказать по вырванному из контекста блоку кода. Рабочий пример с прогресс баром, где всё работает, показан в статье: Графические интерфейсы X: Обновления для библиотеки Easy And Fast (build 2)
А ещё лучше приложить минимальный код для воспроизведения. Это наиболее быстрый способ получить подсказку. Для воспроизведения достаточно простой схемы:
Кнопка на главном окне открывает диалоговое окно. Кнопка на диалоговом окне запускает "тяжеловесные расчёты".
Наверное эти тяжёлые вычисления такие долгие, что программа никак не может выйти из функции Func() ? Поэтому прогресс-бар не обновляется? Может быть там вечный цикл?
Для управления видимостью у каждого элемента есть методы Show() и Hide().
//---
В общем, сложно что-то сказать по вырванному из контекста блоку кода. Рабочий пример с прогресс баром, где всё работает, показан в статье: Графические интерфейсы X: Обновления для библиотеки Easy And Fast (build 2)
Да, Анатоль, в твоих примерах работает, естественно. Но в них ведь лишь пример, бутафория. Прогресс-бар, пример его обновления, выполнен в таймере с абстрактными величинами.
Когда начинаю делать не в таймере с гипотетическими величинами, а в обычном длительном цикле внутри программы, а не таймера, то прогресс-бар не обновляется во время цикла, Он показывается уже обновлённым при повторном его показе.
Тебе не сложно привести пример работы с индикатором выполнения в основной программе в каком-нибудь цикле? Например в таком:
было бы интересно посмотреть правильную работу с индикатором выполнения, а не то, как мне кажется должно быть.
Да, Анатоль, в твоих примерах работает, естественно. Но в них ведь лишь пример, бутафория. Прогресс-бар, пример его обновления, выполнен в таймере с абстрактными величинами.
Когда начинаю делать не в таймере с гипотетическими величинами, а в обычном длительном цикле внутри программы, а не таймера, то прогресс-бар не обновляется во время цикла, Он показывается уже обновлённым при повторном его показе.
Может ChartRedraw() поможет?
Да, спасибо, m_chart.Redraw() помог:
Скриншоты торговой платформы MetaTrader
KBR, D1, 2016.08.22
Just2Trade Online Ltd, MetaTrader 5, Demo