Уже давно меня беспокоит следующий вопрос:
Объявляю, допустим, переменную FCurs:TCursor членом класса формы. Потом в какой-то процедуре выполняю обычное присвоение
FCurs:=Screen.Cursor;
Screen.Cursor:=crHourGlass;
Но возвращаю запомненное значение не в конструкции try...finally, а в другом месте кода. Потому что, например, долгая операция производилась в отдельной нити. И во в чем проблема: курсор не обновляется. Нужно хотя бы слегка пошевелить мышкой, чтобы отобразился "старый" значок. Вот и вопрос: как в описанном случае обновить отображение актуального курсора?
Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице. Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.
13-06-2024 11:00 | Сообщение от автора вопроса
Спасибо всем!
Screen.Cursor:=FCurs - это код из главной нити. Как раз где-то в Synchronize или через посылку события.
Кстати, не обязательно отдельный метод на каждый чих (не совсем метод), можно писать код прямо в...
Synchronize( procedure
begin
// код
end);
Анонимные медоды, кажется, называются.
С ручной подвижкой курсора пробовал, но у меня какой-то глюк возникал. Т.е. курсор не менял положение. ???
Я, правда, использовал только SetCursorPos с какими-то константными значениями для теста.
Короче, из-за нехватки времени на другие задачи, просто стал менять внешний вид интерфейса и дисейблить кнопку на время выполнения
Есть незначительное подозрение? что Screen.Cursor:=FCurs выполняется в той самой отдельной нити. И есть некоторое подозрение, которое я пока проверить не могу, что подобную операцию надо ввыполнять в главной форме (точнее, в главном потоке). Для этого можно применить SendMessage или PostMessage из дочернего потока в главную форму, ну или Synchronize (но от него у меня аллергия и я бы не советовал его применять, потому что ему надо делать отдельный метод под каждый чих, что меня не удовлетворяет).
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Функция может не работать в некоторых версиях броузеров.