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

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

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

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

Andrey: fil пишет: У меня есть какой-то, крутящуюся шестеренку изображает. Все нормально, но иногда может пуститься в инверсном режиме Покажи этот анимированный gif - посмотрим....

Dima: fil пишет: Все нормально, но иногда может пуститься в инверсном режиме в этом режиме пустится может только в одном случае если фреймы считываются и показываются не с первого и далее по порядку а с последнего и в обратном порядке. Ты же на FW пишешь и понимаю что юзаешь какой то стандартный вывод FW анимированных GIF. Сделай свой показ GIFки. Идею дам. Сам делал и работает норм.

fil: Я за, давай идею. Сильно надо для метрошных прог на планшете


Dima: fil Предварительно надо распаковать GIF на фреймы (каждый фрейм это картинка со свои номером). Затем все фреймы запаковать в ZIP архив. При сборке проги этот ZIP сунуть в ресурс (под MINGW это без проблем , под BCC не знаю). При старте проги этот архив из ресурса извлекаем и распаковываем куда хотим. Заполняем в нужном порядке массив именами фреймов. Затем (там где надо ) в отдельном потоке ходим по массиву (и с задержкой если она нужна) показываем фреймы (картинки) в нужном месте , средствами FW (Minigui или GtWVG) Когда это все не нужно , убиваем поток.

fil: O'k, пробну FWeb, на форуме Линареса , случаем не глянул ?

Dima: fil Смотрел как то давно. Посмотрю еще.

Andrey: Dima пишет: Предварительно надо распаковать GIF на фреймы (каждый фрейм это картинка со свои номером). Затем все фреймы запаковать в ZIP архив. При сборке проги этот ZIP сунуть в ресурс (под MINGW это без проблем , под BCC не знаю). При старте проги этот архив из ресурса извлекаем и распаковываем куда хотим. Заполняем в нужном порядке массив именами фреймов. Затем (там где надо ) в отдельном потоке ходим по массиву (и с задержкой если она нужна) показываем фреймы (картинки) в нужном месте , средствами FW (Minigui или GtWVG) Когда это все не нужно , убиваем поток. Дима, а можешь пример на МиниГуи сделать ? Уж очень нужен был бы для всех !

Dima: Andrey Так он же есть C:\MiniGUI\SAMPLES\Advanced\AnimatedGif\ Просто я его взял за идею и извлекаю фреймы не из GIF контейнера а из ZIP , в Минигуи это висит на таймере у меня все в потоке под GTWVG.

Andrey: Dima пишет: Просто я его взял за идею и извлекаю фреймы не из GIF контейнера а из ZIP , в Минигуи это висит на таймере у меня все в потоке под GTWVG. Вот вот, я и про это: ZIP и поток для МиниГуи...

Dima: Andrey пишет: поток для МиниГуи... Да я только взял в руки Минигуи , новичок я еще )) Идея есть и не думаю что сложно ее реализовать. А пока разбираюсь с другими вещами которые у меня "не идут" куда следует в Минигуи ;) Andrey пишет: ZIP и поток Ты же под BCC сидишь и там может быть проблемка с размером файла и с попыткой сунуть его в ресурс в момент сборки.

Andrey: Dima пишет: Ты же под BCC сидишь и там может быть проблемка с размером файла и с попыткой сунуть его в ресурс в момент сборки. Если размер ресурса больше 500кб - только тогда будут проблемы. А на небольшой пример проблем не будет.

Dima: Andrey Вопросы к тебе тогда ;) Извлечь фреймы из GIF контейнера можешь ? Упаковать их в ZIP можешь ? Сунуть ZIP в ресурс во время сборки можешь ? Извлечь ZIP в RUNTIME и распаковать его в нужную тебе папку , можешь ? Считать в массив имена извлеченных фреймов и затем выводить их в цикле в потоке средствами Минигуи , можешь ? Что из этого не умеешь ? ;) Думаю умеешь все ! А я новичок еще и мне без году .......неделя ))))

Andrey: Dima пишет: Извлечь фреймы из GIF контейнера можешь ? Упаковать их в ZIP можешь ? Вот это не знаю как делать. Я понимаю что это нужно делать вручную перед созданием проекта. Как это сделать ? Dima пишет: Сунуть ZIP в ресурс во время сборки можешь ? Извлечь ZIP в RUNTIME и распаковать его в нужную тебе папку , можешь ? Вот это могу. Dima пишет: Считать в массив имена извлеченных фреймов и затем выводить их в цикле в потоке средствами Минигуи , можешь ? Выводить в цикле в потоке средствами Минигуи - точно не могу... Попробовать можно...

Dima: Andrey Извлекаем фреймы по быстрому средствами Минигуи В C:\MiniGUI\SAMPLES\Advanced\AnimatedGif\demo.prg в функции OnClose() закоменти строку AEVal( aPictures, {|f| FErase( f ) } ) Пересобери пример. Запусти и выбери свой GIF , после того как он полностью "проанимируется" ищи фреймы в папке GetTempFolder()

Andrey: Dima пишет: после того как он полностью "проанимируется" Сделал... А зачем фреймы ZIP-ом сжимать ? Можно сразу в ресурсы затолкать и не мучиться с распаковкой. Или я маленький gif подобрал, 9 Кб всего ?

Dima: Andrey пишет: Можно сразу в ресурсы затолкать и не мучиться с распаковкой можно и так

Andrey: Dima а avi-файл чем можно разобрать и собрать, чтобы в МиниГуи потом показывался ? Я пробовал несколько раз, у меня не получилось.

Dima: Andrey А что собирался выудить с него ? Картинки (кадры)..

Andrey: Да и заменить на свои а потом обратно соединить. Вот с обратным преобразованием фигня получается, avi-шка перестаёт работать в МиниГуи.

Dima: Попробуй http://plugring.farmanager.com/plugin.php?pid=578&l=ru Cписок фреймов мне удалось получить а вот с извлечением пока не понял как.

Andrey: Dima пишет: Попробуй http://plugring.farmanager.com/plugin.php?pid=578&l=ru А как его прикрутить к Far 3.0 Там же: Arc, Far 1.x, x86

Dima: я и не пытался , но там есть avixtr.exe , он тебе и нужен

Andrey: Коряво он как то делает ....

Andrey: Dima пишет: Считать в массив имена извлеченных фреймов и затем выводить их в цикле в потоке средствами Минигуи , можешь ? Отдельный вывод получился - пример demo3.prg А в потоке не получается - пример demo4.prg ( окно висит без прелодера и время не показывает ) Что не так делаю ? Проекты тут - https://cloud.mail.ru/public/BrN3/d4atak4Rv

Andrey: Выспался и кажись понял в чём дела... Исправлю сейчас...

Dima: Пример 4 , ну во первых надо собрать с ключем /MT Далее , переделал FUNCTION WaitingProcess() [pre2] FUNCTION WaitingProcess() LOCAL nI, cMsg, nTime Local Th PRIVATE aBegin PRIVATE lexit:=.t. aBegin := WaitWinCreate( "Working..." ) // Запускаем в отдельном потоке (preloding) th:=hb_threadStart(HB_THREAD_INHERIT_MEMVARS, @WaitWinTimer(), @aBegin) nTime := SECONDS() FOR nI := 1 TO 10 Form1.Label_1.Value := 'For nI := ' + HB_NtoS(nI) // final waiting INKEYGUI(500) DO EVENTS NEXT //DoMethod(aBegin[1],'Release') // убить окно ожидания lexit:=.f. hb_threadDetach(th) WaitWinClose(aBegin) // убить окно ожидания cMsg := "Elapsed processing time - " + SECTOTIME( SECONDS() - nTime ) MsgInfo(cMsg) RETURN NIL [/pre2] + [pre2] FUNCTION WaitWinTimer(aDim) LOCAL cFormName := aDim[1], aPict := aDim[2], nTime := aDim[3] LOCAL cTime := "Time passed " + SECTOTIME( SECONDS() - nTime ) LOCAL cPict do while lexit M->nILogoWait ++ // номер показа картинки M->nILogoWait := IIF( M->nILogoWait > LEN(aPict), 1, M->nILogoWait ) cPict := aPict[M->nILogoWait] cTime := "Time passed " + SECTOTIME( SECONDS() - nTime ) SetProperty( cFormName, "Label_1", "Value", cTime ) SetProperty( cFormName, "Image_1", "Picture", cPict ) InkeyGui(100) DO EVENTS enddo RETURN NIL [/pre2] При чем часики показывают а вот картинок нет....... Упс ))) Надо завести demo4.rc

Dima: Dima пишет: th:=hb_threadStart(HB_THREAD_INHERIT_MEMVARS, @WaitWinTimer(), @aBegin) Хотя тут можно конечно как и было hb_threadDetach(hb_threadStart(HB_THREAD_INHERIT_MEMVARS, @WaitWinTimer(), @aBegin)) Dima пишет: lexit:=.f. hb_threadDetach(th) hb_threadDetach(th) уже не нужен , но тогда в WaitWinTimer нужно делать проверку а есть ли форма

Andrey: Dima пишет: При чем часики показывают а вот картинок нет....... Упс ))) Надо завести demo4.rc У меня то же самое... Может ресурсы не подтягиваются в отдельный поток ? Dima пишет: hb_threadDetach(th) уже не нужен , но тогда в WaitWinTimer нужно делать проверку а есть ли форма Лучше сделать автоинкремент окна cFormName := "WaitWin_" + HB_NtoS( _GetId() ), а поток убивать. Иначе потоки будут засорять память ! Или я неправ ?

Dima: я могу выложить рабочий пример если ты не понял все правки что я сделал

Andrey: Dima пишет: я могу выложить рабочий пример если ты не понял все правки что я сделал Да понял я уже, разобрался. Но как всегда тянет на улучшения. Решил сократить код. Создаю окно ожидания (прелодера) сразу в потоке. Потом убиваю поток - окно остаётся на экране. Делаю по другому, запоминаю в статик переменную имя окна, а потом убиваю окно. Нифига - вылет по ошибке. Вот пример - https://cloud.mail.ru/public/GiWn/cEYHCiBVT А в чем разница: hb_threadStart(HB_THREAD_INHERIT_PUBLIC, @WaitWinTimer(), aBegin ) и hb_threadStart(HB_THREAD_INHERIT_MEMVARS, @WaitWinTimer(), @aBegin) ?

Dima: Неа с LETO я не буду смотреть пример , нет его у меня уже да и сервис ставить не хочу , давай без LETO ;)

Dima: Andrey пишет: HB_THREAD_INHERIT_PUBLIC Андрей есть описание в доке Александра !!!

Andrey: Dima пишет: Неа с LETO я не буду смотреть пример , нет его у меня уже да и сервис ставить не хочу , давай без LETO ;) Извиняюсь, не та ссылка. Вот правильная ссылка - https://cloud.mail.ru/public/BdQH/CiZE7Ubz1

Dima: Ну так ты конкретно переделал ;) В потоке окно создаешь , не знаю правильно ли это. Вот DEMO4.pRG рабочий (не забудь DEMO4.RC) [pre2] /* * MINIGUI - Harbour Win32 GUI library Demo * * Copyright 2015 Verchenko Andrey <verchenkoag@gmail.com> */ #include "minigui.ch" #include "hbthread.ch" PROCEDURE Main PUBLIC nILogoWait DEFINE WINDOW Form1 ; AT 0 , 0 ; WIDTH 600 HEIGHT 400 ; TITLE "Window with expectation (preloding) in stream" ; BACKCOLOR {0,176,240} ; MAIN @ 10, 0 LABEL Label_1 WIDTH 600 HEIGHT 28 ; VALUE 'For:' SIZE 16 BOLD TRANSPARENT CENTERALIGN @ 50,20 BUTTON Btn_Start CAPTION "Start!" WIDTH 140 HEIGHT 48 ; ACTION WaitingProcess() @ 130,20 BUTTON Btn_End CAPTION "Close" WIDTH 140 HEIGHT 48 ; ACTION ThisWindow.Release() END WINDOW CENTER WINDOW Form1 ACTIVATE WINDOW Form1 RETURN /////////////////////////////////////////////////////////////////// FUNCTION WaitingProcess() LOCAL nI, cMsg, nTime Local Th PRIVATE aBegin PRIVATE lexit:=.t. aBegin := WaitWinCreate( "Working..." ) // создать окно ожидания // Запускаем в отдельном потоке (preloding) th:=hb_threadStart(HB_THREAD_INHERIT_MEMVARS, @WaitWinTimer(),@aBegin) nTime := SECONDS() FOR nI := 1 TO 50 Form1.Label_1.Value := 'For nI := ' + HB_NtoS(nI) // final waiting INKEYGUI(100) DO EVENTS NEXT lexit:=.f. hb_threadDetach(th) WaitWinClose(aBegin) // убить окно ожидания cMsg := "Elapsed processing time - " + SECTOTIME( SECONDS() - nTime ) MsgInfo(cMsg) RETURN NIL ////////////////////////////////////////////////////////////////////////////// FUNCTION WaitWinCreate( cTitle, lCenter, nWRow, nWCol) LOCAL nI, cFormName := "WaitWin_" + AllTRim( Str( _GetId() ) ) LOCAL nTime := SECONDS() LOCAL aPict := {"FR01","FR02","FR03","FR04","FR05","FR06","FR07","FR08",; "FR09","FR10","FR11","FR12"} DEFAULT cTitle := "Wait", lCenter := .T., nWRow := 0, nWCol := 0 M->nILogoWait := 1 // номер показа картинки //SET INTERACTIVECLOSE OFF DEFINE WINDOW &cFormName ; ROW 0 COL 0 ; WIDTH 420 HEIGHT 230 ; TITLE cTitle ; MODAL NOSYSMENU NOSIZE ; BACKCOLOR WHITE ; FONT 'Tahoma' SIZE 12 @ 10,10 LABEL Label_1 ; WIDTH 400 HEIGHT 20 ; VALUE "Time passed " + TIME() ; CENTERALIGN VCENTERALIGN TRANSPARENT @ 40, (420-128)/2 IMAGE Image_1 PICTURE aPict[1] ; WIDTH 128 HEIGHT 128 ; WHITEBACKGROUND TRANSPARENT @ 40 + 128 + 2, 10 LABEL Label_2 ; WIDTH 400 HEIGHT 20 ; VALUE 'Wait a little is being processed ...' ; CENTERALIGN VCENTERALIGN TRANSPARENT END WINDOW Center Window &cFormName IF lCenter == .F. SetProperty( cFormName, "Row", nWRow ) SetProperty( cFormName, "Col", nWCol ) ENDIF Activate Window &cFormName NoWait RETURN { cFormName, aPict, nTime } // вернуть номер окна, чтобы по нему потом убить окно ////////////////////////////////////////////////////////////////////// FUNCTION WaitWinTimer(aDim) LOCAL cFormName := aDim[1], aPict := aDim[2], nTime := aDim[3] LOCAL cTime := "Time passed " + SECTOTIME( SECONDS() - nTime ) LOCAL cPict do while lexit M->nILogoWait ++ // номер показа картинки M->nILogoWait := IIF( M->nILogoWait > LEN(aPict), 1, M->nILogoWait ) cPict := aPict[M->nILogoWait] cTime := "Time passed " + SECTOTIME( SECONDS() - nTime ) SetProperty( cFormName, "Label_1", "Value", cTime ) SetProperty( cFormName, "Image_1", "Picture", cPict ) InkeyGui(50) DO EVENTS enddo RETURN NIL ////////////////////////////////////////////////////////////////////// FUNCTION WaitWinClose(aDim) LOCAL cFormName := aDim[1] Domethod(cFormName,"Release") DO MESSAGE LOOP RETURN NIL [/pre2] А пример понятно чего падает ;) Ты в начале убиваешь окно которое создано в потоке а пока оно убивается поток все еще пишет на это окно а затем убиваешь поток в котором это же окно и создавалось. Как то не стыкуется все для меня как новичка ;) И я не уверен что поток увидит STATIC переменную заявленную в MAIN модуле (это догадка) До кучи ,окно создано в потоке и я так понимаю доступа к нему из основной программы не получить.

Andrey: Dima пишет: Ну так ты конкретно переделал ;) Зато более понятный код становиться. Dima пишет: И я не уверен что поток увидит STATIC переменную заявленную в MAIN модуле (это догадка) Переменную то видит. Можно проверить. Вот простой код: WaitWinClose(cStaticIdWinWait) // убить окно ожидания ...... ////////////////////////////////////////////////////////////////////// FUNCTION WaitWinClose(cFormName) Domethod(cFormName,"Release") // строка 136 DO MESSAGE LOOP RETURN NIL Самое интересное что окно в потоке не видит, из-за этого наверно и ошибка: Error MGERROR/0 Window: WaitWin_16944 is not defined. Program terminated. Called from MSGMINIGUIERROR(94) Called from DOMETHOD(4663) Called from WAITWINCLOSE(136) Как сделать (убить окно в потоке) ?

Dima: Наверное Минигуи (это предположение) ни чего не знает про окна созданные в потоке , если я не прав , пусть меня поправят

Dima: Можно попробовать перед тем как убить окно (WaitWinClose) , средствами Минигуи получить список всех дочерних окон , будет ли среди них окно заявленное в потоке. И тогда все будет понятно ;) Но по любасу если проблему с закрытием окно и решишь то на следующей строке прога у тебя свалится так как поток будет жить и будет писать в окно которого уже нет.

Dima: Вставь перед убитием окна aChild := {} EnumChildWindows( GetFormHandle("Form1"), { |hChild| AADD( aChild, hChild ), .T. }, 0 ) там дальше я не знаю как по хендлу получить имя окна , если получишь выведи все в MSGINFO и смотри есть ли там окно созданное в потоке EnumChildWindows сырцы есть в примерах.

Andrey: Dima пишет: EnumChildWindows сырцы есть в примерах. Так я же его и делал...

Andrey: Вот можешь этой прогой пользоваться, я её до конца не доделал (картинки в ГРИД не поставил от окон) - но так работает. https://cloud.mail.ru/public/FWC8/LhYGEB5R6

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: Спасибо БОЛЬШОЕ !

Andrey: gfilatov2002 пишет: Надо было смотреть в папке MiniGUI\SAMPLES\Advanced\tGif А удалить объект oGif с формы можно без FormReSize( oGif ) ? Есть типа такого - oGif:Delete() - oGif:Release() ? Блин, из-за одной картинки всю форму перерисовывать с таблицей - НЕ ХОЧЕТСЯ !

gfilatov2002: Andrey пишет: А удалить объект oGif с формы можно Для корректного полного удаления gif-картинки можно использовать _ReleaseAniGif ( GifName, FormName )



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