Форум » GUI » Картинка "ожидания" » Ответить

Картинка "ожидания"

fil: Кто чем изображает ожидание выполнения процесса (напр.коннекта) ? Удобно использовать анимированный gif. У меня есть какой-то, крутящуюся шестеренку изображает. Все нормально, но иногда может пуститься в инверсном режиме

Ответов - 62, стр: 1 2 3 4 All

Andrey: Если указать при создании окна CHILD NOSIZE NOCAPTION тогда пропадает окантовка окна. Как запретить изменение размера окна в этом случае ? Пример тут - https://cloud.mail.ru/public/BGTY/nYFNYRSns

Dima: Andrey пишет: тогда пропадает окантовка окна А она нужна ? Без нее лучше смотрится !

Andrey: Dima пишет: А она нужна ? Без нее лучше смотрится ! А если белый фон ? Тогда как ?


gfilatov2002: Andrey пишет: Как запретить изменение размера окна в этом случае ? Можно попробовать сделать так [pre2] DEFINE WINDOW &cFormName ; ROW 0 COL 0 ; WIDTH 420 HEIGHT 230 ; TITLE '' ; MINWIDTH 420 MINHEIGHT 230 ; MAXWIDTH 420 MAXHEIGHT 230 ; CHILD NOCAPTION ; TOPMOST ; BACKCOLOR WHITE ; FONT 'Tahoma' SIZE 12 [/pre2]

Andrey: gfilatov2002 пишет: Можно попробовать сделать так Спасибо ! Я это тоже хотел попробовать (помнил об этом) но хотелось услышать ответ Гуру !

Andrey: Dima смотри, что мне Григорий прислал... Я его немного подрихтовал. https://cloud.mail.ru/public/Bd52/P5hnX8H38 Теперь можно по базе делать расчеты в несколько потоков.... Хотя ранее об этом писал alkresin, да всё руки не доходили... Наверно тему нужно бы передвинуть из Флейма ?

Dima: Andrey Тему двинул Andrey пишет: Теперь можно по базе делать расчеты в несколько потоков Да только в расчетах не используй INKEYGUI это все таки задержка.

Andrey: Dima пишет: Да только в расчетах не используй INKEYGUI это все таки задержка. Конечно. Это просто для примера сейчас сделано !

Andrey: Инструкция по созданию своего прелодера (Окна ожидания): 1) Идем на сайт http://preloaders.net/ru 2) Выбираем понравившуюся gif-ку и сохраняем в нужном размере 3) Берем пример MiniGUI\SAMPLES\Advanced\AnimatedGif\demo.prg и правим функцию Function OnClose(), удаляем строку или комментируем: // AEVal( aPictures, {|f| FErase( f ) } ) и исправляем еще функцию: LoadGif( picture, @aPictInfo, @aPictures, @aImageInfo ) на LoadGif( picture, @aPictInfo, @aPictures, @aImageInfo, GetCurrentFolder() ) 4) Собираем пример, запускаем и указываем свою *.gif 5) Получаем несколько файлов .gif - так называемые фреймы. Например: 350_frame_0001.gif .... 350_frame_0018.gif 6) Переписываем свои фреймы к себе в проект и подключаем в свой ресурсный файл проекта, например: FR01 GIF res\350_frame_0001.gif FR02 GIF res\350_frame_0002.gif ...................... FR18 GIF res\350_frame_0018.gif 7) Для показа этого прелодера берем и добавляем к себе в проект. Смотрите примеры из папки MiniGUI\SAMPLES\BASIC\WAIT_WINDOW_2 /////////////////////////////////////////////////////////////////////////// У себя в проекте можно использовать мой последний вариант без PUBLIC переменных: https://gist.github.com/VerchenkoAG/be80f18c5e49a062a2d7 ВНИМАНИЕ ! Прелодер можно показывать только на одну операцию, т.е. одно окно "ожидания". Для одновременного показа нескольких окон "ожидания" нужно править исходник. Сделайте это самостоятельно. Сборка программы для использования прелодера - ключ /mt !

Andrey: Не работает поток ! Или нет прорисовки объектов в окне с потоком ! Что делать ? Какой командой можно перерисовать объекты ? Исходник использую этот - https://gist.github.com/VerchenkoAG/be80f18c5e49a062a2d7 Добился прорисовки первого экрана, а дальше НИЧЕГО не помогает ! Прошу помощи. Видео как это выглядит на медленном коннекте выкладываю - https://cloud.mail.ru/public/JLiD/uALv1MTx7

Andrey: Опять проблема с потоком... Не показываются картики, как будто висит отдельный поток и всё тут... Может из-за того что инет медленный использую, через модем, но всё равно же отдельный поток должен рисовать прелодер !!! Использовал рабочий пример, выше который https://gist.github.com/VerchenkoAG/be80f18c5e49a062a2d7 Делаю так: // создаём окно ожидания с потоком WaitThreadCreate( 'Connect PostgreSQL ...' ) // коннект к базе в интернете oServer := TPQServer():New(cHost, cDatabase, cUser, cPass,,schema) msgDebug("oServer:NetErr()",oServer:NetErr()) WaitThreadClose() // закрыть окно "ожидания" И всё, висим - белое окно, через 25 сек показ что завершилась операция с ошибкой - Connection timed out (0x0000274C/10060).... Исправил в исходнике - теперь показывает первый экран нормально: DEFINE WINDOW &cFormName ; ROW 0 COL 0 ; WIDTH 420 HEIGHT 230 ; TITLE '' ; MINWIDTH 420 MINHEIGHT 230 ; MAXWIDTH 420 MAXHEIGHT 230 ; MODAL NOCAPTION ; BACKCOLOR WHITE ; ON MOUSECLICK MoveActiveWindow() ; ON INIT {|| ProcessMessages() } Но далее поток не выводит картинки... висит.... Как сделать показ картинок в потоке пока идёт другая операция ?

Andrey: Вот в инете нашёл новые анимированные красивые картинки для прелодера https://icons8.com/preloaders/en/circular/3/ И ещё красивые сочетающиеся цвета для форм https://coolors.co/

Andrey: Григорий, а можно увеличить скорость бегунка этого человечка в примере WAIT_WINDOW_3(10).7z ? Пробовал менять циферку - не помогает... [pre2] @ 40, (420-128)/2 ANIGIF Gif_1 OBJ oStaticGif PARENT &cFormName PICTURE "Ani3dMan128" ; WIDTH 142 HEIGHT 128 ; DELAY 5 BACKGROUNDCOLOR WHITE[/pre2] Может быть из-за того что в отдельном потоке работает эта гифка ? И ещё глюк словил, если открывается большое окно и по нему начать кликать мышкой по кнопкам, то бегущий человек не останавливается (это хорошо), но прекращается подсчёт итоговый - 28/50, т.е. он сбоит ! Это плохо конечно, но у меня есть категория НЕТЕРПЕЛИВЫХ юзеров которые тупо кликают мышкой в таких местах. Типа быстрей задача считаться будет. Может сделать блокировку всей формы ? Так можно делать ? И как лучше это сделать ? Пример у тебя есть...

gfilatov2002: Andrey пишет: Может сделать блокировку всей формы ? Так можно делать ? Блокировать форму можно командой DoMethod ( cForm, "DisableUpdate" ) а по окончании расчета надо сделать разблокировку DoMethod( cForm, "EnableUpdate" )

Andrey: gfilatov2002 пишет: Блокировать форму можно командой А где нужно блокировать ? В ON INIT окна не работает .... вот так выглядит.... счётчик идёт и окно ожидания может висеть пока AlertInfo() не убрать. Пример выслал на почту.

Andrey: Да так работает... [pre2] :Event( 1, {| ow | // ON INIT windows + close the "calculation" window LOCAL cMsg, Ctrl This.Topmost := .F. This.oBut_Help.Enabled := .F. // это наверное не нужно ? ниже же все обьекты блокируем ! DoMethod(ow:Name, "DisableUpdate") // блокировать всю форму // block the whole form FOR EACH Ctrl IN HMG_GetFormControls( ow:Name ) IF "oBut" $ Ctrl SetProperty( ow:Name, Ctrl, "Enabled", .F. ) ENDIF NEXT ....[/pre2]

gfilatov2002: Andrey пишет: This.oBut_Help.Enabled := .F. // это наверное не нужно ? ниже же все обьекты блокируем ! Согласен. Уже поправил у себя

Andrey: А как получить размеры Gif-файла ? Не в ресурсах, а на диске ? Посмотрел примеры, нашёл MiniGUI\SAMPLES\Advanced\AnimatedGif , ну уж очень мудрёно получаем размеры. Есть уже готовая функция в МиниГуи ? Григорий, а в справку все функции нельзя добавить ?

gfilatov2002: Andrey пишет: Посмотрел примеры, нашёл MiniGUI\SAMPLES\Advanced\AnimatedGif Немного промахнулся с примером Надо было смотреть в папке MiniGUI\SAMPLES\Advanced\tGif, там найдешь функцию GetGIFSize()

Andrey: Спасибо БОЛЬШОЕ !



полная версия страницы