Страница 1 из 2

Форма ожидания

СообщениеДобавлено: 09.09.2019 09:46:50
S_Gur
Господа знатоки компонентов Лазаруса, обращаюсь к вам за очередным советом. Мне нужно сделать StayOnTop форму, висящую, когда программа выполняет какое-нибудь длительное действие, и в каком-то презентабельном виде отображающую динамику процесса. В Дельфях в случае не особо внятноописываемого процесса я использовал TAnimate, если нужно было вывести сообщение - Rx-овский или Jedi TSecretPanel, выполняющий скроллинг строки. Есть ли что-то подобное в Лазарусе, чтобы не тратить время на написание чего-то своего?

Re: Форма ожидания

СообщениеДобавлено: 09.09.2019 10:03:29
Vadim
S_Gur
Есть компонент LazVLC. Отображает на любой форме работу VLC-плеера. Пока в программе идёт что-нибудь серьёзное, клиенту в StayOnTop форме можно показывать мультик "Том и Джерри"... ;-)

Re: Форма ожидания

СообщениеДобавлено: 09.09.2019 10:24:06
S_Gur
Vadim писал(а):можно показывать мультик "Том и Джерри"

Да-да... А еще лучше 10 серий "ТАСС уполномочен заявить"... :D

Re: Форма ожидания

СообщениеДобавлено: 09.09.2019 10:49:15
CynicRus
Насколько я помню, TAnimate позволяет проигрывать авишки до 64 килобайт. Тут прямого аналога - разве что прикручивать VLC, что для такой задачи уж слишком громоздко. Пожалуй можно кросплатформенно заменить на TGFiViewer и тот же SecretPanel из RX. Ну а авишки перегнать в гифки.

Re: Форма ожидания

СообщениеДобавлено: 09.09.2019 11:06:16
S_Gur
CynicRus, не совсем так. TAnimate проигрывает встроенные системные индикаторы: копирование или удаление файлов, поиск файлов и т. д. Именно они меня и интересуют

Re: Форма ожидания

СообщениеДобавлено: 09.09.2019 11:27:37
Vadim
S_Gur
Lazarus - многоплатформенная IDE, поэтому термин "встроенные в систему" здесь неприменим.
Вдобавок, конкретно для TAnimate, Вы всё равно ему должны были указать, какой именно файл AVI прокрутить. В винде есть предопределённые авишки, потому что там графическая оболочка всего одна-единственная, а вот в линуксе графических оболочек - вагон и маленькая тележка. Поэтому "предопределённый" здесь никак не может существовать. Так что Вам придётся набор видеофайлов для тех или иных действий держать в каталоге своей программы. Либо GIFки, что благотворно скажется на размерах...

Re: Форма ожидания

СообщениеДобавлено: 09.09.2019 11:56:06
S_Gur
Vadim, я понимаю. Поэтому и ищу замену этому хозяйству. В принципе, меня вполне устроит скроллируемый в цикле текст, что-то типа TSecretPanel. Надеюсь, скроллинг текста не зависит от платформы?

Re: Форма ожидания

СообщениеДобавлено: 09.09.2019 12:45:02
serbod
Есть кроссплатформенный TProgressBar, можно его анимировать по таймеру.

Re: Форма ожидания

СообщениеДобавлено: 09.09.2019 12:50:41
S_Gur
serbod, если мой процесс имеет определенное количество шагов и можно рассчитать процент выполнения, то это самое простое и удобное решение. В случае, когда процент выполнения процедуры не определяется, то это не самое красивое решение. Я в таких случаях вывешиваю сообщение, что-то типа "Дождитесь окончания процесса"

Re: Форма ожидания

СообщениеДобавлено: 09.09.2019 13:05:44
serbod
S_Gur Если ваш фоновый процесс имеет таймаут, то 100% прогресса - это время таймаута. Завершится раньше - никто не обидится. =)

Re: Форма ожидания

СообщениеДобавлено: 09.09.2019 13:49:33
Vadim
S_Gur
Есть ещё BGRA-компоненты (https://github.com/bgrabitmap), там есть взаправдашние стрелочные часы. Выгладят представительно, вполне можно на режим ожидания ставить. Правда программа сильно толстеет... :-)

Re: Форма ожидания

СообщениеДобавлено: 09.09.2019 19:35:43
zoltanleo
S_Gur писал(а):Мне нужно сделать StayOnTop форму, висящую, когда программа выполняет какое-нибудь длительное действие, и в каком-то презентабельном виде отображающую динамику процесса.

Так речь про splash-форму? Если так, то здесь нужен доп.поток, в котором программа выполняет какие-то свои расчеты, а в основном потоке показывается сплэш, на котором (хоть по таймеру, хоть в гиф-анимации) можно показывать хоть черта лысого :)

Изображение

Если речь идет только о компонентах gif-анимации, то в OPM лазаря есть TGIFViewer и GifAnim(этот понравился больше)

Изображение

Re: Форма ожидания

СообщениеДобавлено: 09.09.2019 20:02:57
S_Gur
zoltanleo писал(а):здесь нужен доп.поток, в котором программа выполняет какие-то свои расчеты


Не все так просто. Например, при работе с EhLib-овским гридом все самые интересные фичи этого грида можно получить, только открывая набор данных в режиме FetchAllInOpen. Толку от того, что я запущу загрузку в отдельном потоке, никакого - пока не загрузится весь набор данных, продолжать работу невозможно. Ситуации бывают разные. Собственно, я уже решил проблему старым дедовским способом - установил из сетевого диспетчера пакетов лазарусовский RxLib и получил ту самую TSecretPanel, которую я часто использовал в Дельфях. Единственное, что меня напрягает - получу ли я этот самый RxLib, установив Лазарус под Линукс. Но форма эта в общем-то довольно декоративная, дойдет до дела - буду разбираться

Re: Форма ожидания

СообщениеДобавлено: 09.09.2019 20:45:00
zoltanleo
S_Gur писал(а): Например, при работе с EhLib-овским гридом все самые интересные фичи этого грида можно получить, только открывая набор данных в режиме FetchAllInOpen.

можно узнать, что за фичи такие, которые проявляются только при полном фетче данных? :) Что-нибудь с голыми девушками связанное? А то я после 4-й версии с эхлибом не сталкивался...

Re: Форма ожидания

СообщениеДобавлено: 09.09.2019 21:01:00
S_Gur
zoltanleo писал(а):можно узнать, что за фичи такие


Сортировка, фильтрация, быстрый поиск, построение деревьев... Много чего. Постраничная подгрузка данных при работе с обычными гридами малопродуктивна и очень сильно нагружает сервер - как минимум, любая операция поиска или обычной сортировки выливается в запрос к серваку.