Форум » GUI » Программа не отвечает » Ответить

Программа не отвечает

rvu: Бывает такое - программа занята выполнением каких-то действий. При этом стоит ее свернуть-развернуть или еще как-то мышкой покликать по ней и винда говорит что она не отвечает. При этом перестают показываться изменения в окне программы, которые показываются, если ее не трогать, т.е., видимо, если фокус не уходит. Я знаю, что это стандартное поведение винды, но оно раздражает. Кто-нибудь обходил это? И если да, то как?

Ответов - 7

SergKis: rvu пишет Бывает такое - программа занята выполнением каких-то действий. Разбавляйте свои длительные действия командой DO EVENTS или функцией DoEvents(), т.к. не даете обрабатывать очередь. nDo := 0 DO WHILE ! EOF() nDo++ If nDo > 10 DO EVENTS nDo := 0 EndIf SKIP ENDDO

rvu: Спасибо!

rvu: SergKis пишет: Разбавляйте свои длительные действия командой DO EVENTS или функцией DoEvents(), т.к. не даете обрабатывать очередь. А что делать, если идет индексация большого файла? Там же команда одна - INDEX ON, а может идти долго. Как-то оформить потоком? Выделить ресурсы? Хотя бы в эту сторону смотреть?


Pasha: rvu пишет: А что делать, если идет индексация большого файла? Там же команда одна - INDEX ON, а может идти долго. В команде индекс есть опции Eval и Every. В качестве Eval можно воткнуть вызов DoEvents(), а Every - вызов для каждой ну скажем 100-й записи

Новичок: или покажи прогресс выполнения действия через PROGRESSBAR - и наглядно для пользователя + коммент, типа "Подготовка данных...", и самому , я так делаю где требуется некоторое время выполнения - вроде еще нигде не замыкало)

Andrey: Нашёл способ вешать программу с "плавающей" ошибкой: [pre2] cAdres := ALLTRIM(ALIAS()->ADRESPRN) cFont := GetProperty(cForm, "Label_Adres", "Fontname") nWlbl := GetProperty(cForm, "Label_Adres", "Width") nHlbl := GetProperty(cForm, "Label_Adres", "Height") // функция из MiniGUI\SAMPLES\BASIC\ButtonEx_DynamicMenu nFSize := GetFontSize4Text( cAdres, cFont, , .F. , nWlbl, nHlbl ) SetProperty(cForm, "Label_Adres", "Fontsize" , nFSize) // изменить размер фонта SetProperty(cForm, "Label_Adres", "Value" , cAdres)[/pre2] Если поле пустое, то программа вешается наглухо !

Haz: Andrey пишет: Нашёл способ вешать программу с "плавающей" ошибкой Надо найти способ проверять значение перед сменой размера шрифта а вообще это самый частый косяк , мне тоже лень везде проверки ставить



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