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.euSergey писал(а): 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/ |