TAnimate в Windows XP / Vista с включенными темами не будет работать

Коллега использовал пользовательский AVI для индикации прогресса в течение более длительных операций в течение многих лет. Это'с всегда работал нормально.

Недавно он решил перейти с Delphi 7 на Delphi 2007, частично чтобы получить поддержку тем для своих приложений. (Мы'Наконец-то большинство людей, но не все, работают на XP.) Анимация перестала работать. Отключение тем заставляет его работать снова.

TAnimate - это оболочка для элемента управления анимацией Windows, созданная с помощью InitCommonControlsEx (ICC_ANIMATE_CLASS). Документация MSDN говорит, что "Если вы используете ComCtl32.dll версии 6, поток не поддерживается, поэтому убедитесь, что ваше приложение не блокирует пользовательский интерфейс или анимация не произойдет. " Очевидно, это и есть предполагаемое поведение.

У кого-нибудь есть предложение об обходном пути или альтернативе этой проблеме? Обработка он 'пытается показать прогресс для неЭто хорошо подходит для создания отдельного потока, и по очевидным причинам Application.ProcessMessages также не является хорошим решением.

РЕДАКТИРОВАТЬ: ЯЯ наградил Роба Кеннеди правильным ответом на этот вопрос, потому что он)пропущенная ссылка" (каламбур) Раймонду Ченус сообщением в блоге на эту тему, и б) потому что, конечно, правильный перевод был перенесен в отдельную ветку.

Ирония здесь: операция, которую он проводил, блокировавшая TAnimate, была операцией индексации для используемого нами механизма базы данных (Advantage Database Server или ADS). Он неНе говоря уже о том, что он пришел ко мне с проблемой.

ADS поддерживает обратный вызов хода выполнения с использованием методов TAdsDataSet.AdsRegisterCallbackFunction и TAdsDataSet.AdsClearCallbackFunction. Функция обратного вызова обеспечивает как ход выполнения (в процентах) текущей операции, так и способ отмены операции с помощью функции.возвращаемое значение. Таким образом, весь вопрос оказывается спорным; функция обратного вызова может использоваться для обновления индикатора выполнения, который указывает пользователю, что приложение нет повешен

Ответы на вопрос(2)

Ваш ответ на вопрос