OberonCore
https://forum.oberoncore.ru/

Помогите, пожалуйста, с нестандартной графикой
https://forum.oberoncore.ru/viewtopic.php?f=24&t=1540
Страница 1 из 1

Автор:  Sergey [ Суббота, 02 Май, 2009 12:21 ]
Заголовок сообщения:  Помогите, пожалуйста, с нестандартной графикой

Уважаемые участники форума, обращаюсь к вам за помощью, но сначала позвольте небольшое предисловие, для ясности.

Я не программист, но по роду своей деятельности (научные исследования) часто приходится дополнять теоретические расчеты вычислительными экспериментами. Причем моделируемые системы таковы, что стандартные вычислительные средства пакетов MathCad и MatLab (SciLab), либо слишком громоздки, либо плохо применимы, либо медлительны. Программы обычно пишу для текущего внутрилабораторного использования, но некоторые идут в образовательный процесс. До последнего времени работал в Delphi 7, но по понятным причинам приходится мигрировать на бесплатное и поддерживаемое ПО.
В Интернете не так много бесплатных (для некоммерческого использования) сред с достаточно развитым и дружественным интерфейсом для разработки программ вычислительного характера. Выбор был между FPC (Lasarus), J и ББ.
Я уже давно и с большим интересом посещаю ваш форум. Деловитость и обстоятельность обсуждений является одним из аргументов (в дополнение к достоинствам языка и среды) в пользу выбора ББ для решения своих задач.
Первый опыт работы со средой и опыт использования библиотеки Lib (графическое представление результатов вычислений необходимо) порадовал удобством написания и тестирования программ-примеров из начального набора и простотой привязки форм к программным переменным. К сожалению методично и обстоятельно разбираться со средой нет возможности, собираюсь делать это в процессе работы.
Но в процессе работы я столкнулся с трудностью.
Задача.
Дано: имеется вычислительный процесс, описывающий динамику некоторой системы. Количество расчетных точек (время процесса) фиксировано.
Требуется: отображать в графическом окне (горизонтально) процесс вычислений с самого начала и до завершения, причем график должен быть постоянно "растянут" по оси абсцисс на всю ширину графического окна. Скроллинга, сохранения и пр. не требуется.
Примеры разработки похожей задачи (Ticker и "График истории показаний") ужасают своими объемами и многословием. Мне не нужен универсальный модуль со множеством мне не нужных функций. Кроме того в Tickerе используются относительно низкоуровневые графические операции, как в свое время приходилось делать в ТурбоПаскале. Это конечно не смертельно, но вот в Делфи решение этой задачи занимает несколько строчек кода. Там я использовал автомасштабирование в графических компонентах и полную перерисовку графиков.
Когда я пытаюсь воспроизвести что-то подобное тому, что делал в Делфи, используя функции Update или Cut из LibPlotters, то ББ ничего не показывает пока идет имитация вычислительного процесса и выдает в конце уже законченный график.
Мне же нужно наблюдать ход процесса вычислений, с возможностью прекратить его или по ходу дела изменить параметры модели. Есть ли возможность решить задачу, допустим в рамках Lib или какой-либо другой библиотеки, без разработки универсального модуля для других возможных приложений? Нужна специализированная процедура прямо внутри вычислительного модуля.
Извините за многословие, если что.

Автор:  Александр Ильин [ Суббота, 02 Май, 2009 12:55 ]
Заголовок сообщения:  Re: Помогите, пожалуйста, с нестандартной графикой

Services.Action?

Автор:  Info21 [ Суббота, 02 Май, 2009 13:49 ]
Заголовок сообщения:  Re: Помогите, пожалуйста, с нестандартной графикой

Sergey писал(а):
ББ ничего не показывает пока идет имитация вычислительного процесса и выдает в конце уже законченный график.
Мне же нужно наблюдать ход процесса вычислений, с возможностью прекратить его или по ходу дела изменить параметры модели.
Как намекнул А.Ильин, нужно разбить расчет на куски в тех точках, где нужно обновлять график/взаимодействовать, каждый кусок оформить в виде Service.Action, и посылать сигнал об обновлении картинки в конце каждого расчетного куска.

Будут трудности -- пишите в лс; у Вас стандартная задача, какой-то такой пример сделать необходимо.

Автор:  QWERTYProgrammer [ Суббота, 02 Май, 2009 17:18 ]
Заголовок сообщения:  Re: Помогите, пожалуйста, с нестандартной графикой

На форуме как-то уже рассматривалась схожая проблема в теме
"Зависание" BlackBox при длительных вычислениях

Автор:  Sergey [ Воскресенье, 03 Май, 2009 13:12 ]
Заголовок сообщения:  Re: Помогите, пожалуйста, с нестандартной графикой

Спасибо, попробую.

А что значит "пишите в ЛС"? Личные сообщения отличаются от форума?

Автор:  Илья Ермаков [ Воскресенье, 03 Май, 2009 13:18 ]
Заголовок сообщения:  Re: Помогите, пожалуйста, с нестандартной графикой

Нажмите кнопочку "ЛС" внизу сообщения того человека, с которым хотите лично попереписываться.

Автор:  Sergey [ Понедельник, 04 Май, 2009 13:48 ]
Заголовок сообщения:  Re: Помогите, пожалуйста, с нестандартной графикой

Уважаемые участники форума, первая задача поддалась! Спасибо за помощь.
Я незатейливо использовал структуру программы, на которую дал ссылку QWERTYProgrammer: "Зависание BlackBox при длительных вычислениях" viewtopic.php?f=1&t=130.

Однако хорошего много не бывает. Всплыли новые вопросы.
1. Графики продолжают рисоваться, если я делаю какие-то манипуляции с формой, но вывод полностью тормозится до завершения всего счета, если я обращаюсь к меню ББ. Так и должно быть? Хотя в программе из ссылки вывод в StdLog продолжается и при обращении к меню.
2. Где можно посмотреть способы фиксации положений окон с графиками и формы – панели управления? Их у меня несколько и их желательно организовать определенным образом.
3. При повторном запуске появляется новое окно при сохранении неактивного старого. В процедуре Stop есть строки Services.RemoveAction(graph); graph := NIL; . Подскажите, пожалуйста, что еще нужно для закрытия старого окна? Или где про это написано?
4. Можно ли выводить окно с графиком без заголовка? Графиков - много, места - мало.
5. Для остановки вывода графика через кнопки формы нужно кликнуть два раза. Первый раз, чтобы сделать форму активной, а потом уже на самой кнопке. Можно ли сохранять окно активным при выводе графика? Это что-то с фокусом?


P.S. Да, а каким горячим ключом в редакторе ББ можно удалить строку? Не смог найти.

Автор:  Valery Solovey [ Понедельник, 04 Май, 2009 14:06 ]
Заголовок сообщения:  Re: Помогите, пожалуйста, с нестандартной графикой

Способ разместить графики в пространстве и без заголовков - сделать всё это в одном окне. Один View - один график.

Чтобы кнопку не приходилось нажимать дважды. Сделайте документ, где форма с кнопкой активным и выполните "Dev->Mask Mode" (или "Разработка->Режим маски").

Автор:  Axcel [ Понедельник, 04 Май, 2009 17:08 ]
Заголовок сообщения:  Re: Помогите, пожалуйста, с нестандартной графикой

А все таки, есть-ли способ делать окна без заголовков?

Автор:  Илья Ермаков [ Понедельник, 04 Май, 2009 17:11 ]
Заголовок сообщения:  Re: Помогите, пожалуйста, с нестандартной графикой

Посмотрите на OberonCore библиотеку Mt, там мы какие-то рюшки на базе WinApi закладывали под энциклопедии, можно было окна мучать :) Толком уже не помню.

Автор:  Евгений Темиргалеев [ Понедельник, 04 Май, 2009 17:13 ]
Заголовок сообщения:  Re: Помогите, пожалуйста, с нестандартной графикой

Т.е. можно, но не средствами каркаса ББ.

Автор:  Sergey [ Среда, 06 Май, 2009 19:03 ]
Заголовок сообщения:  Re: Помогите, пожалуйста, с нестандартной графикой

Уважаемые участники форума, извините за настойчивость, но хотелось бы уж доделать, раз начал. Судя по немногочисленности и неполноте откликов, профессионалам-программистам не очень интересно заниматься такой ерундой, но без этой "ерунды" работать плохо. Растаскивать около десятка окон по рабочему листу после каждого перезапуска – удовольствие ниже среднего. Получается, что в ББ сделать удобный интерфейс под свою задачу не так-то просто. В Delphi каждый график "просто" раз и навсегда помнит свое положение и размер после визуально-мышечной компоновки, а здесь далеко не сразу поймешь, как и подступиться. И, похоже, объяснить начинающему тоже не просто.
Ну, это так, лирика. Теперь по делу.

Рекомендация Valery Solovey перейти в режим маски для устранения двойного нажатия кнопки "Стоп" не сработала - все равно нужно нажимать дважды.
Совет по поводу размещения графиков в пространстве и без заголовков не понял. Что значит одновременно "сделать все это в одном окне" и "один View – один график"?

По совету Ильи Ермакова попробовал библиотеку Mt. В модуле Windows есть процедура ApplyRoundCorners которая убирает заголовок окна на который указывает дескриптор. Если дескриптор = 0, то процедура обрабатывает активное окно. Активным является окно с графиком и окно ББ. Процедура выполняется и убирает заголовок у самого ББ. Можно ли определить дескриптор для окна с графикой, созданного с помощью процедуры Plotters.OpenAux?

И у меня вопрос к участникам форума, есть ли у кого-нибудь какие-либо рекомендации по поводу вопросов, заданных в предыдущем сообщении?

Автор:  Пётр Кушнир [ Среда, 06 Май, 2009 19:09 ]
Заголовок сообщения:  Re: Помогите, пожалуйста, с нестандартной графикой

Sergey,
вы бы хоть скриншоты вывесили, что НЕ так.
Мне лично не понятно из ваших описаний. Отсюда кажется, что задача довольно простая и уж точно стандартная, но видимо, вы что-то делаете не так. Пожалуйста, приложите скриншот с проблемными проблемами и мы постараемся вам помочь.

Автор:  Иван Кузьмицкий [ Среда, 06 Май, 2009 19:23 ]
Заголовок сообщения:  Re: Помогите, пожалуйста, с нестандартной графикой

Рекомендую подсистему Desktop (http://www.zinnamturm.eu/downloadsDH.htm#Desktop) для сохранения размеров и положения окон и восстановления их после перезапуска. Сам её использую, очень удобно.

Про двойное нажатие понял! Это такая особенность BlackBox - если окно неактивно, то первый клик по нему активирует (фокусирует), а уже второй клик позволяет нажать кнопку. Вообще-то, можно попробовать открыть окно в режиме Tool с помощью StdCmds.OpenToolDialog.

Ну а графики, на самом деле, можно размещать все в одном окне, в нескольких объектах отображения, а само окно развернуть пошире. Единственно, что в режиме маски размеры таких отображений не изменишь, и надо дополнительно поработать над окном-контейнером.

Автор:  Александр Ильин [ Среда, 06 Май, 2009 20:44 ]
Заголовок сообщения:  Re: Помогите, пожалуйста, с нестандартной графикой

Sergey писал(а):
Совет по поводу размещения графиков в пространстве и без заголовков не понял. Что значит одновременно "сделать все это в одном окне" и "один View – один график"?
Если я правильно понимаю, вам нужно видеть сразу несколько графиков. Предлагаю вам поместить их все в один документ: создайте пустой документ (меню Файл - Новый), туда вставьте ваши графики - хоть в строчку, хоть в столбик. Вот вам и будет "всё в одном окне". Пример того, как вставлять объекты в документ, можно посмотреть в стандартном меню Controls: Controls.DepositPushButton; StdCmds.PasteView.

Если нужный вам объект уже есть где-то в окне, идёте в это окно, нажимаете Ctrl+Пробел и делаете Copy-Paste корневого объекта в нужный документ.

Автор:  Александр Ильин [ Среда, 06 Май, 2009 20:59 ]
Заголовок сообщения:  Re: Помогите, пожалуйста, с нестандартной графикой

Sergey писал(а):
1. Графики продолжают рисоваться, если я делаю какие-то манипуляции с формой, но вывод полностью тормозится до завершения всего счета, если я обращаюсь к меню ББ. Так и должно быть? Хотя в программе из ссылки вывод в StdLog продолжается и при обращении к меню.
Насколько я помню, фоновые задачи замораживаются на время работы с меню. Есть неофициальный патч для того, чтобы выполнение в этом случае не останавливалось, но перерисовка всё равно замораживается.
Sergey писал(а):
2. Где можно посмотреть способы фиксации положений окон с графиками и формы – панели управления? Их у меня несколько и их желательно организовать определенным образом.
Подсистема Desktop в коллекции www.zinnamturm.eu
Sergey писал(а):
3. При повторном запуске появляется новое окно при сохранении неактивного старого. В процедуре Stop есть строки Services.RemoveAction(graph); graph := NIL; . Подскажите, пожалуйста, что еще нужно для закрытия старого окна? Или где про это написано?
Это не понял.
Sergey писал(а):
4. Можно ли выводить окно с графиком без заголовка? Графиков - много, места - мало.
Вставляйте графики в существующий текстовый документ, а не в отдельное окно.
Sergey писал(а):
5. Для остановки вывода графика через кнопки формы нужно кликнуть два раза. Первый раз, чтобы сделать форму активной, а потом уже на самой кнопке. Можно ли сохранять окно активным при выводе графика? Это что-то с фокусом?
Чтобы активация и реакция кнопки происходили одним щелчком, нужно окно открыть с режиме "tool dialog": StdCmds.OpenToolDialog.
Sergey писал(а):
P.S. Да, а каким горячим ключом в редакторе ББ можно удалить строку? Не смог найти.
Стандартного средства такого нет. Можно написать свою процедуру, но удаление строки может быть сложно реализовать. Удаление абзаца - легко (в тексте программ строки обычно = абзацам, за исключением комментариев).

Автор:  Sergey [ Четверг, 07 Май, 2009 04:53 ]
Заголовок сообщения:  Re: Помогите, пожалуйста, с нестандартной графикой

Огромное спасибо за советы! Попробую - сообщу результаты.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/