Сохранить диалог зависает в 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):

  1. Создать новое приложение форм VCL
  2. Поместите TSaveDialog1 в форму
  3. Поместите кнопку с событием 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. Теперь программа работает хорошо. Спасибо за все советы.

Другие вопросы по тегам