-
Добрый день. Когда я в dpr файле проекта устанавливаю
CoInitFlags := COINIT_MULTITHREADED;
перед Application.Initialize; , в OpenFileDialog после этого некоторые иконки 16x16 файлов с зарегистрированным расширением отображаются как иконки незарегистрированных типов (бумажка с маленьким логотипом Windows). Например, .html. Delphi 7, тестировал на системах windows 2000 - windows 7. Если я убираю строку CoInitFlags := COINIT_MULTITHREADED;, то иконки отображаются нормально. Есть у кого-нибудь какие-нибудь идеи, как связана com threading model и локальная копия system image list и почему это происходит?
-
> Например, .html.
всегда один и тот же набор расширений?
-
> всегда один и тот же набор расширений?
Да.
-
очевидно, это связано с тем, что shell-компоненты винды умеют правильно работать только в STA режиме. можно так выкрутиться, если уж очень надо в мультитреде работать CoUninitialize; CoInitializeEx(nil, COINIT_APARTMENTTHREADED); OpenDialog.Execute; ... CoUninitialize; CoInitializeEx(nil, COINIT_MULTITHREADED);
-
Спасибо за консультауию. Решил проблему заменой логики работы на модель с COINIT_APARTMENTTHREADED, так как multi-threaded в общем-то в данном случае и не требовалось, просто было чуть удобнее. Обнаружил, что иконки портились для Html и htm если они зарегистрированы для Explorer или Opera. Если они были зарегистрированы для FireFox, то они не портились. Странное поведение, честно говоря, какие-то непонятные недоработки в Windows.
-
> иконки портились для Html и htm если они зарегистрированы > для Explorer или Opera. Если они были зарегистрированы для > FireFox, то они не портились
ну это как-то с COM связано у FF иконка так указана: C:\Program Files\Mozilla Firefox\firefox.exe,1, то есть тупо из файла достается у IE - "%1", т.е. там как-то задействованы интерфейсы. По той же причине, скорей всего, OpenDialog не открывает ни одну из спецпапок (типа "мои документы") в MT
-
|