Сохранить диалог зависает в XE2
Я использую Delphi XE2 в Windows 8. Я перенес приложение D2009 на XE2, и внезапно диалог сохранения (TSaveDialog) становится очень медленным.
Когда для Project/Options/Application/Runtime Themes установлено значение Enable Runtime Themes:
=>
Когда я открываю диалоговое окно сохранения, окно останавливается примерно на минуту (иногда я могу закрыть окно, но мне придется подождать около минуты, пока я не смогу снова открыть диалоговое окно (или другой TOpenDialog). Отображается новый диалог сохранения в стиле Vista.
Если я пытаюсь запустить этот exe-файл на ПК с Windows 7, приложение зависает при запуске (я также безуспешно пытался работать в режиме совместимости с XP).
Когда для Project/Options/Application/Runtime Themes установлено значение none:
=>
Диалог сохранения работает хорошо (быстро), но отображается диалоговое окно старого стиля, например, ниже:
Этот exe хорошо работает на ПК с Windows 7 (хотя и с диалогом старого стиля).
Ps. Мой старый exe-файл, скомпилированный с D2009 на ПК с Win 7, работает хорошо как на ПК с Win 7, так и на ПК 8, и правильно показывает диалоги, используя новый стиль диалога Vista.
Могут ли это быть некоторые права доступа в Win 8/7, вызывающие это? Я использую IDE FIX PACK 5.4,
Спасибо Томас
1 ответ
Я нашел, в чем проблема. Я использую {$MAXSTACKSIZE $4000000}, и это приводит к зависанию диалога сохранения примерно на минуту. Причина такого огромного размера стека в том, что я использую рекурсивный алгоритм (который мне теперь, вероятно, нужно переделать).
Воспроизведите следующим образом (XE2):
- Создать новое приложение форм VCL
- Поместите TSaveDialog1 в форму
- Поместите кнопку с событием OnClick
`
Begin
if SaveDialog1.Execute then
MessageDlg('ok', mtInformation,[mbOk], 0);
end;
`
4: Откройте исходный файл проекта и поместите следующие строки:
// {$ MAXSTACKSIZE $ 3500000} // это десятичное значение 5 5574 528 ОК!
{$MAXSTACKSIZE $4000000} // это десятичное значение 6 7108 864 Не в порядке!
Запустите и нажмите кнопку. Дайте фиктивное имя файла и нажмите Сохранить. Ничего не произошло. Продолжайте нажимать на кнопку в течение 60 секунд. Диалог окончательно закроется.
Перейдите на меньший размер стека $3500000. Теперь программа работает хорошо. Спасибо за все советы.