Вызов 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)