OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 29 Март, 2024 03:14

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 17 ] 
Автор Сообщение
СообщениеДобавлено: Суббота, 02 Май, 2009 12:21 

Зарегистрирован: Суббота, 02 Май, 2009 12:07
Сообщения: 5
Откуда: Россия, Красноярск
Уважаемые участники форума, обращаюсь к вам за помощью, но сначала позвольте небольшое предисловие, для ясности.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 02 Май, 2009 12:55 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Services.Action?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 02 Май, 2009 13:49 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Sergey писал(а):
ББ ничего не показывает пока идет имитация вычислительного процесса и выдает в конце уже законченный график.
Мне же нужно наблюдать ход процесса вычислений, с возможностью прекратить его или по ходу дела изменить параметры модели.
Как намекнул А.Ильин, нужно разбить расчет на куски в тех точках, где нужно обновлять график/взаимодействовать, каждый кусок оформить в виде Service.Action, и посылать сигнал об обновлении картинки в конце каждого расчетного куска.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 02 Май, 2009 17:18 

Зарегистрирован: Среда, 04 Июль, 2007 16:43
Сообщения: 247
На форуме как-то уже рассматривалась схожая проблема в теме
"Зависание" BlackBox при длительных вычислениях


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 03 Май, 2009 13:12 

Зарегистрирован: Суббота, 02 Май, 2009 12:07
Сообщения: 5
Откуда: Россия, Красноярск
Спасибо, попробую.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 03 Май, 2009 13:18 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Нажмите кнопочку "ЛС" внизу сообщения того человека, с которым хотите лично попереписываться.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 04 Май, 2009 13:48 

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

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


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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 04 Май, 2009 14:06 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
Способ разместить графики в пространстве и без заголовков - сделать всё это в одном окне. Один View - один график.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 04 Май, 2009 17:08 

Зарегистрирован: Понедельник, 05 Июнь, 2006 09:49
Сообщения: 327
Откуда: Ленинград, Емельянов Алексей Николаевич
А все таки, есть-ли способ делать окна без заголовков?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 04 Май, 2009 17:11 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Посмотрите на OberonCore библиотеку Mt, там мы какие-то рюшки на базе WinApi закладывали под энциклопедии, можно было окна мучать :) Толком уже не помню.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 04 Май, 2009 17:13 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Т.е. можно, но не средствами каркаса ББ.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 06 Май, 2009 19:03 

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

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

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 06 Май, 2009 19:09 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
Sergey,
вы бы хоть скриншоты вывесили, что НЕ так.
Мне лично не понятно из ваших описаний. Отсюда кажется, что задача довольно простая и уж точно стандартная, но видимо, вы что-то делаете не так. Пожалуйста, приложите скриншот с проблемными проблемами и мы постараемся вам помочь.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 06 Май, 2009 19:23 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
Рекомендую подсистему Desktop (http://www.zinnamturm.eu/downloadsDH.htm#Desktop) для сохранения размеров и положения окон и восстановления их после перезапуска. Сам её использую, очень удобно.

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 06 Май, 2009 20:44 
Аватара пользователя

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 06 Май, 2009 20:59 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
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. Да, а каким горячим ключом в редакторе ББ можно удалить строку? Не смог найти.
Стандартного средства такого нет. Можно написать свою процедуру, но удаление строки может быть сложно реализовать. Удаление абзаца - легко (в тексте программ строки обычно = абзацам, за исключением комментариев).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 07 Май, 2009 04:53 

Зарегистрирован: Суббота, 02 Май, 2009 12:07
Сообщения: 5
Откуда: Россия, Красноярск
Огромное спасибо за советы! Попробую - сообщу результаты.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 17 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB