Автор | Сообщение |
|
| |
Пост N: 347
Зарегистрирован: 17.06.10
|
|
Отправлено: 18.06.15 09:11. Заголовок: Картинка "ожидания"
Кто чем изображает ожидание выполнения процесса (напр.коннекта) ? Удобно использовать анимированный gif. У меня есть какой-то, крутящуюся шестеренку изображает. Все нормально, но иногда может пуститься в инверсном режиме
|
|
|
Ответов - 62
, стр:
1
2
3
4
All
[только новые]
|
|
|
| постоянный участник
|
Пост N: 4275
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.06.15 20:59. Заголовок: fil пишет: У меня е..
fil пишет: цитата: | У меня есть какой-то, крутящуюся шестеренку изображает. Все нормально, но иногда может пуститься в инверсном режиме |
| Покажи этот анимированный gif - посмотрим....
|
|
|
|
| |
Пост N: 4913
Зарегистрирован: 17.05.05
|
|
Отправлено: 18.06.15 21:47. Заголовок: fil пишет: Все норм..
fil пишет: цитата: | Все нормально, но иногда может пуститься в инверсном режиме |
| в этом режиме пустится может только в одном случае если фреймы считываются и показываются не с первого и далее по порядку а с последнего и в обратном порядке. Ты же на FW пишешь и понимаю что юзаешь какой то стандартный вывод FW анимированных GIF. Сделай свой показ GIFки. Идею дам. Сам делал и работает норм.
|
|
|
|
| |
Пост N: 348
Зарегистрирован: 17.06.10
|
|
Отправлено: 18.06.15 22:48. Заголовок: Я за, давай идею. Си..
Я за, давай идею. Сильно надо для метрошных прог на планшете
|
|
|
|
| |
Пост N: 4916
Зарегистрирован: 17.05.05
|
|
Отправлено: 19.06.15 09:06. Заголовок: fil Предварительно ..
fil Предварительно надо распаковать GIF на фреймы (каждый фрейм это картинка со свои номером). Затем все фреймы запаковать в ZIP архив. При сборке проги этот ZIP сунуть в ресурс (под MINGW это без проблем , под BCC не знаю). При старте проги этот архив из ресурса извлекаем и распаковываем куда хотим. Заполняем в нужном порядке массив именами фреймов. Затем (там где надо ) в отдельном потоке ходим по массиву (и с задержкой если она нужна) показываем фреймы (картинки) в нужном месте , средствами FW (Minigui или GtWVG) Когда это все не нужно , убиваем поток.
|
|
|
|
| |
Пост N: 349
Зарегистрирован: 17.06.10
|
|
Отправлено: 19.06.15 12:24. Заголовок: O'k, пробну..
O'k, пробну FWeb, на форуме Линареса , случаем не глянул ?
|
|
|
|
| |
Пост N: 4920
Зарегистрирован: 17.05.05
|
|
Отправлено: 19.06.15 13:14. Заголовок: fil Смотрел как то ..
fil Смотрел как то давно. Посмотрю еще.
|
|
|
|
| постоянный участник
|
Пост N: 4276
Зарегистрирован: 12.09.06
|
|
Отправлено: 19.06.15 18:30. Заголовок: Dima пишет: Предвар..
Dima пишет: цитата: | Предварительно надо распаковать GIF на фреймы (каждый фрейм это картинка со свои номером). Затем все фреймы запаковать в ZIP архив. При сборке проги этот ZIP сунуть в ресурс (под MINGW это без проблем , под BCC не знаю). При старте проги этот архив из ресурса извлекаем и распаковываем куда хотим. Заполняем в нужном порядке массив именами фреймов. Затем (там где надо ) в отдельном потоке ходим по массиву (и с задержкой если она нужна) показываем фреймы (картинки) в нужном месте , средствами FW (Minigui или GtWVG) Когда это все не нужно , убиваем поток. |
| Дима, а можешь пример на МиниГуи сделать ? Уж очень нужен был бы для всех !
|
|
|
|
| |
Пост N: 4921
Зарегистрирован: 17.05.05
|
|
Отправлено: 19.06.15 21:24. Заголовок: Andrey Так он же ес..
Andrey Так он же есть C:\MiniGUI\SAMPLES\Advanced\AnimatedGif\ Просто я его взял за идею и извлекаю фреймы не из GIF контейнера а из ZIP , в Минигуи это висит на таймере у меня все в потоке под GTWVG.
|
|
|
|
| постоянный участник
|
Пост N: 4277
Зарегистрирован: 12.09.06
|
|
Отправлено: 19.06.15 21:43. Заголовок: Dima пишет: Просто ..
Dima пишет: цитата: | Просто я его взял за идею и извлекаю фреймы не из GIF контейнера а из ZIP , в Минигуи это висит на таймере у меня все в потоке под GTWVG. |
| Вот вот, я и про это: ZIP и поток для МиниГуи...
|
|
|
|
| |
Пост N: 4922
Зарегистрирован: 17.05.05
|
|
Отправлено: 19.06.15 22:06. Заголовок: Andrey пишет: поток..
Andrey пишет: Да я только взял в руки Минигуи , новичок я еще )) Идея есть и не думаю что сложно ее реализовать. А пока разбираюсь с другими вещами которые у меня "не идут" куда следует в Минигуи ;) Andrey пишет: Ты же под BCC сидишь и там может быть проблемка с размером файла и с попыткой сунуть его в ресурс в момент сборки.
|
|
|
|
| постоянный участник
|
Пост N: 4278
Зарегистрирован: 12.09.06
|
|
Отправлено: 19.06.15 22:20. Заголовок: Dima пишет: Ты же п..
Dima пишет: цитата: | Ты же под BCC сидишь и там может быть проблемка с размером файла и с попыткой сунуть его в ресурс в момент сборки. |
| Если размер ресурса больше 500кб - только тогда будут проблемы. А на небольшой пример проблем не будет.
|
|
|
|
|
| |
Пост N: 4923
Зарегистрирован: 17.05.05
|
|
Отправлено: 19.06.15 22:28. Заголовок: Andrey Вопросы к те..
Andrey Вопросы к тебе тогда ;) Извлечь фреймы из GIF контейнера можешь ? Упаковать их в ZIP можешь ? Сунуть ZIP в ресурс во время сборки можешь ? Извлечь ZIP в RUNTIME и распаковать его в нужную тебе папку , можешь ? Считать в массив имена извлеченных фреймов и затем выводить их в цикле в потоке средствами Минигуи , можешь ? Что из этого не умеешь ? ;) Думаю умеешь все ! А я новичок еще и мне без году .......неделя ))))
|
|
|
|
| постоянный участник
|
Пост N: 4279
Зарегистрирован: 12.09.06
|
|
Отправлено: 19.06.15 22:48. Заголовок: Dima пишет: Извлечь..
Dima пишет: цитата: | Извлечь фреймы из GIF контейнера можешь ? Упаковать их в ZIP можешь ? |
| Вот это не знаю как делать. Я понимаю что это нужно делать вручную перед созданием проекта. Как это сделать ? Dima пишет: цитата: | Сунуть ZIP в ресурс во время сборки можешь ? Извлечь ZIP в RUNTIME и распаковать его в нужную тебе папку , можешь ? |
| Вот это могу. Dima пишет: цитата: | Считать в массив имена извлеченных фреймов и затем выводить их в цикле в потоке средствами Минигуи , можешь ? |
| Выводить в цикле в потоке средствами Минигуи - точно не могу... Попробовать можно...
|
|
|
|
| |
Пост N: 4924
Зарегистрирован: 17.05.05
|
|
Отправлено: 20.06.15 09:01. Заголовок: Andrey Извлекаем фр..
Andrey Извлекаем фреймы по быстрому средствами Минигуи В C:\MiniGUI\SAMPLES\Advanced\AnimatedGif\demo.prg в функции OnClose() закоменти строку AEVal( aPictures, {|f| FErase( f ) } ) Пересобери пример. Запусти и выбери свой GIF , после того как он полностью "проанимируется" ищи фреймы в папке GetTempFolder()
|
|
|
|
| постоянный участник
|
Пост N: 4294
Зарегистрирован: 12.09.06
|
|
Отправлено: 22.06.15 07:11. Заголовок: Dima пишет: после т..
Dima пишет: цитата: | после того как он полностью "проанимируется" |
| Сделал... А зачем фреймы ZIP-ом сжимать ? Можно сразу в ресурсы затолкать и не мучиться с распаковкой. Или я маленький gif подобрал, 9 Кб всего ?
|
|
|
|
| |
Пост N: 4938
Зарегистрирован: 17.05.05
|
|
Отправлено: 22.06.15 07:33. Заголовок: Andrey пишет: Можно..
Andrey пишет: цитата: | Можно сразу в ресурсы затолкать и не мучиться с распаковкой |
| можно и так
|
|
|
|
| постоянный участник
|
Пост N: 4295
Зарегистрирован: 12.09.06
|
|
Отправлено: 22.06.15 14:15. Заголовок: Dima а avi-файл чем ..
Dima а avi-файл чем можно разобрать и собрать, чтобы в МиниГуи потом показывался ? Я пробовал несколько раз, у меня не получилось.
|
|
|
|
| |
Пост N: 4942
Зарегистрирован: 17.05.05
|
|
Отправлено: 22.06.15 15:11. Заголовок: Andrey А что собира..
Andrey А что собирался выудить с него ? Картинки (кадры)..
|
|
|
|
| постоянный участник
|
Пост N: 4297
Зарегистрирован: 12.09.06
|
|
Отправлено: 22.06.15 15:48. Заголовок: Да и заменить на сво..
Да и заменить на свои а потом обратно соединить. Вот с обратным преобразованием фигня получается, avi-шка перестаёт работать в МиниГуи.
|
|
|
|
| |
Пост N: 4943
Зарегистрирован: 17.05.05
|
|
Отправлено: 22.06.15 16:42. Заголовок: Попробуй http://plug..
|
|
|
|
| постоянный участник
|
Пост N: 4298
Зарегистрирован: 12.09.06
|
|
Отправлено: 22.06.15 16:49. Заголовок: Dima пишет: Попробу..
Dima пишет: А как его прикрутить к Far 3.0 Там же: Arc, Far 1.x, x86
|
|
|
|
|
| |
Пост N: 4944
Зарегистрирован: 17.05.05
|
|
Отправлено: 22.06.15 17:16. Заголовок: я и не пытался , но ..
я и не пытался , но там есть avixtr.exe , он тебе и нужен
|
|
|
|
| постоянный участник
|
Пост N: 4300
Зарегистрирован: 12.09.06
|
|
Отправлено: 22.06.15 18:56. Заголовок: Коряво он как то дел..
Коряво он как то делает ....
|
|
|
|
| постоянный участник
|
Пост N: 4307
Зарегистрирован: 12.09.06
|
|
Отправлено: 28.06.15 04:08. Заголовок: Dima пишет: Считать..
Dima пишет: цитата: | Считать в массив имена извлеченных фреймов и затем выводить их в цикле в потоке средствами Минигуи , можешь ? |
| Отдельный вывод получился - пример demo3.prg А в потоке не получается - пример demo4.prg ( окно висит без прелодера и время не показывает ) Что не так делаю ? Проекты тут - https://cloud.mail.ru/public/BrN3/d4atak4Rv
|
|
|
|
| постоянный участник
|
Пост N: 4308
Зарегистрирован: 12.09.06
|
|
Отправлено: 28.06.15 13:35. Заголовок: Выспался и кажись по..
Выспался и кажись понял в чём дела... Исправлю сейчас...
|
|
|
|
| |
Пост N: 4975
Зарегистрирован: 17.05.05
|
|
Отправлено: 28.06.15 14:08. Заголовок: Пример 4 , ну во пер..
Пример 4 , ну во первых надо собрать с ключем /MT Далее , переделал FUNCTION WaitingProcess() 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 + 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 При чем часики показывают а вот картинок нет....... Упс ))) Надо завести demo4.rc
|
|
|
|
| |
Пост N: 4976
Зарегистрирован: 17.05.05
|
|
Отправлено: 28.06.15 14:24. Заголовок: Dima пишет: th:=hb..
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 нужно делать проверку а есть ли форма
|
|
|
|
| постоянный участник
|
Пост N: 4310
Зарегистрирован: 12.09.06
|
|
Отправлено: 28.06.15 15:41. Заголовок: Dima пишет: При чем..
Dima пишет: цитата: | При чем часики показывают а вот картинок нет....... Упс ))) Надо завести demo4.rc |
| У меня то же самое... Может ресурсы не подтягиваются в отдельный поток ? Dima пишет: цитата: | hb_threadDetach(th) уже не нужен , но тогда в WaitWinTimer нужно делать проверку а есть ли форма |
| Лучше сделать автоинкремент окна cFormName := "WaitWin_" + HB_NtoS( _GetId() ), а поток убивать. Иначе потоки будут засорять память ! Или я неправ ?
|
|
|
|
| |
Пост N: 4978
Зарегистрирован: 17.05.05
|
|
Отправлено: 28.06.15 15:42. Заголовок: я могу выложить рабо..
я могу выложить рабочий пример если ты не понял все правки что я сделал
|
|
|
|
| постоянный участник
|
Пост N: 4311
Зарегистрирован: 12.09.06
|
|
Отправлено: 28.06.15 16:09. Заголовок: Dima пишет: я могу ..
Dima пишет: цитата: | я могу выложить рабочий пример если ты не понял все правки что я сделал |
| Да понял я уже, разобрался. Но как всегда тянет на улучшения. Решил сократить код. Создаю окно ожидания (прелодера) сразу в потоке. Потом убиваю поток - окно остаётся на экране. Делаю по другому, запоминаю в статик переменную имя окна, а потом убиваю окно. Нифига - вылет по ошибке. Вот пример - https://cloud.mail.ru/public/GiWn/cEYHCiBVT А в чем разница: hb_threadStart( HB_THREAD_INHERIT_PUBLIC, @WaitWinTimer(), aBegin ) и hb_threadStart( HB_THREAD_INHERIT_MEMVARS, @WaitWinTimer(), @aBegin) ?
|
|
|
|
| |
Пост N: 4980
Зарегистрирован: 17.05.05
|
|
Отправлено: 28.06.15 16:14. Заголовок: Неа с LETO я не буду..
Неа с LETO я не буду смотреть пример , нет его у меня уже да и сервис ставить не хочу , давай без LETO ;)
|
|
|
|
|
| |
Пост N: 4981
Зарегистрирован: 17.05.05
|
|
Отправлено: 28.06.15 16:16. Заголовок: Andrey пишет: HB_TH..
Andrey пишет: Андрей есть описание в доке Александра !!!
|
|
|
|
| постоянный участник
|
Пост N: 4312
Зарегистрирован: 12.09.06
|
|
Отправлено: 28.06.15 16:17. Заголовок: Dima пишет: Неа с L..
Dima пишет: цитата: | Неа с LETO я не буду смотреть пример , нет его у меня уже да и сервис ставить не хочу , давай без LETO ;) |
| Извиняюсь, не та ссылка. Вот правильная ссылка - https://cloud.mail.ru/public/BdQH/CiZE7Ubz1
|
|
|
|
| |
Пост N: 4982
Зарегистрирован: 17.05.05
|
|
Отправлено: 28.06.15 16:34. Заголовок: Ну так ты конкретно ..
Ну так ты конкретно переделал ;) В потоке окно создаешь , не знаю правильно ли это. Вот DEMO4.pRG рабочий (не забудь DEMO4.RC) Скрытый текст /* * 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
| А пример понятно чего падает ;) Ты в начале убиваешь окно которое создано в потоке а пока оно убивается поток все еще пишет на это окно а затем убиваешь поток в котором это же окно и создавалось. Как то не стыкуется все для меня как новичка ;) И я не уверен что поток увидит STATIC переменную заявленную в MAIN модуле (это догадка) До кучи ,окно создано в потоке и я так понимаю доступа к нему из основной программы не получить.
|
|
|
|
| постоянный участник
|
Пост N: 4313
Зарегистрирован: 12.09.06
|
|
Отправлено: 28.06.15 17:10. Заголовок: Dima пишет: Ну так ..
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) Как сделать (убить окно в потоке) ?
|
|
|
|
| |
Пост N: 4983
Зарегистрирован: 17.05.05
|
|
Отправлено: 28.06.15 17:16. Заголовок: Наверное Минигуи (эт..
Наверное Минигуи (это предположение) ни чего не знает про окна созданные в потоке , если я не прав , пусть меня поправят
|
|
|
|
| |
Пост N: 4984
Зарегистрирован: 17.05.05
|
|
Отправлено: 28.06.15 17:29. Заголовок: Можно попробовать пе..
Можно попробовать перед тем как убить окно (WaitWinClose) , средствами Минигуи получить список всех дочерних окон , будет ли среди них окно заявленное в потоке. И тогда все будет понятно ;) Но по любасу если проблему с закрытием окно и решишь то на следующей строке прога у тебя свалится так как поток будет жить и будет писать в окно которого уже нет.
|
|
|
|
| |
Пост N: 4985
Зарегистрирован: 17.05.05
|
|
Отправлено: 28.06.15 18:09. Заголовок: Вставь перед убитием..
Вставь перед убитием окна aChild := {} EnumChildWindows( GetFormHandle("Form1"), { |hChild| AADD( aChild, hChild ), .T. }, 0 ) там дальше я не знаю как по хендлу получить имя окна , если получишь выведи все в MSGINFO и смотри есть ли там окно созданное в потоке EnumChildWindows сырцы есть в примерах.
|
|
|
|
| постоянный участник
|
Пост N: 4315
Зарегистрирован: 12.09.06
|
|
Отправлено: 28.06.15 19:11. Заголовок: Dima пишет: EnumChi..
Dima пишет: цитата: | EnumChildWindows сырцы есть в примерах. |
| Так я же его и делал...
|
|
|
|
| постоянный участник
|
Пост N: 4316
Зарегистрирован: 12.09.06
|
|
Отправлено: 28.06.15 19:20. Заголовок: Вот можешь этой прог..
|
|
|
|
| постоянный участник
|
Пост N: 4317
Зарегистрирован: 12.09.06
|
|
Отправлено: 28.06.15 19:47. Заголовок: http://f5.s.qip.ru/1..
|
|
|
|
|
| |
Пост N: 4988
Зарегистрирован: 17.05.05
|
|
Отправлено: 28.06.15 20:04. Заголовок: Andrey пишет: тогда..
Andrey пишет: цитата: | тогда пропадает окантовка окна |
| А она нужна ? Без нее лучше смотрится !
|
|
|
|
| постоянный участник
|
Пост N: 4319
Зарегистрирован: 12.09.06
|
|
Отправлено: 28.06.15 20:28. Заголовок: Dima пишет: А она н..
Dima пишет: цитата: | А она нужна ? Без нее лучше смотрится ! |
| А если белый фон ? Тогда как ?
|
|
|
|
| moderator
|
Пост N: 765
Зарегистрирован: 11.02.10
|
|
Отправлено: 28.06.15 20:33. Заголовок: Andrey пишет: Как з..
Andrey пишет: цитата: | Как запретить изменение размера окна в этом случае ? |
| Можно попробовать сделать так 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
|
|
|
|
| постоянный участник
|
Пост N: 4320
Зарегистрирован: 12.09.06
|
|
Отправлено: 28.06.15 20:37. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Можно попробовать сделать так |
| Спасибо ! Я это тоже хотел попробовать (помнил об этом) но хотелось услышать ответ Гуру !
|
|
|
|
| постоянный участник
|
Пост N: 4331
Зарегистрирован: 12.09.06
|
|
Отправлено: 30.06.15 17:20. Заголовок: Dima смотри, что мне..
Dima смотри, что мне Григорий прислал... Я его немного подрихтовал. https://cloud.mail.ru/public/Bd52/P5hnX8H38 Теперь можно по базе делать расчеты в несколько потоков.... Хотя ранее об этом писал alkresin, да всё руки не доходили... Наверно тему нужно бы передвинуть из Флейма ?
|
|
|
|
| |
Пост N: 4999
Зарегистрирован: 17.05.05
|
|
Отправлено: 30.06.15 17:46. Заголовок: Andrey Это без пото..
Andrey Тему двинул Andrey пишет: цитата: | Теперь можно по базе делать расчеты в несколько потоков |
| Да только в расчетах не используй INKEYGUI это все таки задержка.
|
|
|
|
| постоянный участник
|
Пост N: 4332
Зарегистрирован: 12.09.06
|
|
Отправлено: 30.06.15 18:00. Заголовок: Dima пишет: Да толь..
Dima пишет: цитата: | Да только в расчетах не используй INKEYGUI это все таки задержка. |
| Конечно. Это просто для примера сейчас сделано !
|
|
|
|
| постоянный участник
|
Пост N: 4423
Зарегистрирован: 12.09.06
|
|
Отправлено: 29.07.15 23:27. Заголовок: Инструкция по создан..
Инструкция по созданию своего прелодера (Окна ожидания): 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 !
|
|
|
|
| постоянный участник
|
Пост N: 4452
Зарегистрирован: 12.09.06
|
|
Отправлено: 13.08.15 22:50. Заголовок: Не работает поток ! ..
|
|
|
|
| постоянный участник
|
Пост N: 5004
Зарегистрирован: 12.09.06
|
|
Отправлено: 17.07.16 20:07. Заголовок: Опять проблема с пот..
Опять проблема с потоком... Не показываются картики, как будто висит отдельный поток и всё тут... Может из-за того что инет медленный использую, через модем, но всё равно же отдельный поток должен рисовать прелодер !!! Использовал рабочий пример, выше который 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() } Но далее поток не выводит картинки... висит.... Как сделать показ картинок в потоке пока идёт другая операция ?
|
|
|
|
| постоянный участник
|
Пост N: 7244
Зарегистрирован: 12.09.06
|
|
Отправлено: 10.04.22 19:03. Заголовок: Вот в инете нашёл но..
|
|
|
|
| постоянный участник
|
Пост N: 7283
Зарегистрирован: 12.09.06
|
|
Отправлено: 02.02.23 17:49. Заголовок: Григорий, а можно ув..
Григорий, а можно увеличить скорость бегунка этого человечка в примере WAIT_WINDOW_3(10).7z ? Пробовал менять циферку - не помогает... @ 40, (420-128)/2 ANIGIF Gif_1 OBJ oStaticGif PARENT &cFormName PICTURE "Ani3dMan128" ; WIDTH 142 HEIGHT 128 ; DELAY 5 BACKGROUNDCOLOR WHITE Может быть из-за того что в отдельном потоке работает эта гифка ? И ещё глюк словил, если открывается большое окно и по нему начать кликать мышкой по кнопкам, то бегущий человек не останавливается (это хорошо), но прекращается подсчёт итоговый - 28/50, т.е. он сбоит ! Это плохо конечно, но у меня есть категория НЕТЕРПЕЛИВЫХ юзеров которые тупо кликают мышкой в таких местах. Типа быстрей задача считаться будет. Может сделать блокировку всей формы ? Так можно делать ? И как лучше это сделать ? Пример у тебя есть...
|
|
|
|
| moderator
|
Пост N: 2089
Зарегистрирован: 11.02.10
|
|
Отправлено: 02.02.23 20:43. Заголовок: Andrey пишет: Может..
Andrey пишет: цитата: | Может сделать блокировку всей формы ? Так можно делать ? |
| Блокировать форму можно командой цитата: | DoMethod ( cForm, "DisableUpdate" ) |
| а по окончании расчета надо сделать разблокировку цитата: | DoMethod( cForm, "EnableUpdate" ) |
|
|
|
|
|
| постоянный участник
|
Пост N: 7286
Зарегистрирован: 12.09.06
|
|
Отправлено: 03.02.23 08:20. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Блокировать форму можно командой |
| А где нужно блокировать ? В ON INIT окна не работает .... вот так выглядит.... счётчик идёт и окно ожидания может висеть пока AlertInfo() не убрать. Пример выслал на почту.
|
|
|
|
| постоянный участник
|
Пост N: 7287
Зарегистрирован: 12.09.06
|
|
Отправлено: 03.02.23 13:49. Заголовок: Да так работает... ..
Да так работает... :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 ....
|
|
|
|
| moderator
|
Пост N: 2090
Зарегистрирован: 11.02.10
|
|
Отправлено: 03.02.23 17:57. Заголовок: Andrey пишет: This...
Andrey пишет: цитата: | This.oBut_Help.Enabled := .F. // это наверное не нужно ? ниже же все обьекты блокируем ! |
| Согласен. Уже поправил у себя
|
|
|
|
| постоянный участник
|
Пост N: 7353
Зарегистрирован: 12.09.06
|
|
Отправлено: 04.04.23 19:27. Заголовок: А как получить разме..
А как получить размеры Gif-файла ? Не в ресурсах, а на диске ? Посмотрел примеры, нашёл MiniGUI\SAMPLES\Advanced\AnimatedGif , ну уж очень мудрёно получаем размеры. Есть уже готовая функция в МиниГуи ? Григорий, а в справку все функции нельзя добавить ?
|
|
|
|
| moderator
|
Пост N: 2123
Зарегистрирован: 11.02.10
|
|
Отправлено: 04.04.23 19:43. Заголовок: Andrey пишет: Посмо..
Andrey пишет: цитата: | Посмотрел примеры, нашёл MiniGUI\SAMPLES\Advanced\AnimatedGif |
| Немного промахнулся с примером Надо было смотреть в папке MiniGUI\SAMPLES\Advanced\ tGif, там найдешь функцию GetGIFSize()
|
|
|
|
| постоянный участник
|
Пост N: 7354
Зарегистрирован: 12.09.06
|
|
Отправлено: 04.04.23 20:02. Заголовок: Спасибо БОЛЬШОЕ ! :..
Спасибо БОЛЬШОЕ !
|
|
|
|
| постоянный участник
|
Пост N: 7355
Зарегистрирован: 12.09.06
|
|
Отправлено: 04.04.23 20:16. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Надо было смотреть в папке MiniGUI\SAMPLES\Advanced\tGif |
| А удалить объект oGif с формы можно без FormReSize( oGif ) ? Есть типа такого - oGif:Delete() - oGif:Release() ? Блин, из-за одной картинки всю форму перерисовывать с таблицей - НЕ ХОЧЕТСЯ !
|
|
|
|
| moderator
|
Пост N: 2124
Зарегистрирован: 11.02.10
|
|
Отправлено: 04.04.23 20:38. Заголовок: Andrey пишет: А уда..
Andrey пишет: цитата: | А удалить объект oGif с формы можно |
| Для корректного полного удаления gif-картинки можно использовать цитата: | _ReleaseAniGif ( GifName, FormName ) |
|
|
|
|
Ответов - 62
, стр:
1
2
3
4
All
[только новые]
|
|