Вывешивание окна типа "Ждите"

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Гость

Сообщение Гость »

Проблема.

Вызов API-функции из внешней (чужеродной) DLL и получение результатов занимает продолжительное время (для справки - порядка минуты, на практике может варьироваться от десятка секунд до трех минут). Это время не контролируется никак - просто программа ждет, когда ей вернут результаты.
Соответственно, хочется, чтобы пользователь, нажав соответствующую кнопку, получил на экран всплывающее окошко с текстом типа "Дождитесь окончания". И чтобы это окошно исчезло после получения данных.
На текущий момент у меня прекрасно работает SETCURSOR.
То есть идет так:

Код: Выделить всё

SETCURSOR(Cursor:Wait)
Res#=ExtFunc(param1,param2,...,paramN)
SETCURSOR()
Но курсора в виде часиков мало - хочется окошка.
Я прописал так:

Код: Выделить всё

SETCURSOR(Cursor:Wait)
ProcHandle=START(MyWaitProc,25000)
Res#=ExtFunc(param1,param2,...,paramN)
SETCURSOR()
IF ProcHandle
   POST(Event:CloseDown,,ProcHandle)
END
В итоге получается так:
1) Курсор принимает форму часиков
2) Идет молчаливое обращение к внешней библиотеке, получение данных
3) В форме основной (вызывающей) процедуры отображаются полученные данные
4) И тут... вывешивается окошко MyWaitProc

Где и что я неправильно делаю?

Игорь Смирнов

Опиши ручками в секции глобальных данных окошко WaitWindow и выполни

Код: Выделить всё

       Open(WaitWindow) 
       Display() 
    SETCURSOR(Cursor:Wait)
    Res#=ExtFunc(param1,param2,...,paramN)
    SETCURSOR()
    Close(WaitWindow) 
---------------------------------------
C уважением,
Юрий Философов,
Главный программист
Корпорация "Диполь", Саратов
E-mail yufil@tacis-dipol.ru (служ)
yufil@mail.ru (дом)
ICQ#75924439

Переключение между тредами происходит только при прохождении через ACCEPT.
Просто опиши это окошко, открой его и сделай DISPLAY(). Послк обсчета - закрой. Новый тред не нужен.

WBR, Nick Tsigouro mailto:nick@arsis.ru

В принципе, получилось.
Но единственная неувязка - это окошко пролучилось "неживым".
То есть, я туда хотел поместить анимированный GIF-файл, чтобы во время ожидания результатов хоть какое-то движение происходило.
Но... Картинка не крутится - стоит на месте.
Хотя у окна и есть атрибуты AUTO и IMM.

Игорь Смирнов

AniGif тоже крутится (перерисовывается) при прохождении через ACCEPT. Внутри чужой процедуры наверно не сделаешь.

WBR, Nick Tsigouro

Привет!

А если на окно таймер повесить? А вместо Display() поставить Accept; Break;.
?

Не проверял, но может поможет...

Александр Агеев (aageev@satren.ru)
Написал: ClaList(2)
Гость

Сообщение Гость »

Тема старая, как платформа среды Clarion. Когда в окне работает другая процедура и проходов в цикле через ACCEPT не происходит, окно мертвое. Никакие элементы управления не работают и гифы не крутятся.

Единственный вариант, это навешивать на окно стандартный виндовый анимационный контрол, который умеет показывать ANI и создавать для себя выделенный виндовый поток. Вот он будет крутится, ОС заставит.

Должны быть в природе шаблоны для включения в окно такого контрола. Один из них EasyAnimation от IngasoftPlus. Наверное, есть и фришные.

Удачи!
__________________________________
Владимир Якимченко (IСQ 16 993 194)
Написал: ClaList(2)
Ответить