2013-12-17 2 views
0

Я использую Delphi XE2 в Windows 8. Я портировал приложение D2009 на XE2, и внезапно диалог сохранения (TSaveDialog) очень медленный.Сохранение диалога зависает в XE2

Когда Project/Options/Application/время выполнения Тема установлена ​​в режиме исполнения Темы:

=>

Когда я открываю диалоговое окно сохранения окна замерзает в течение одной минуты (иногда я могу закрыть окно но нужно подождать около минуты, пока я не смогу снова открыть диалоговое окно (или другое окно TOpenDialog). Появится новый диалог сохранения стиля в стиле Vista.

Если я попытаюсь запустить этот exe на ПК с Windows 7, приложение зависает (я также попытался с режимом совместимости с XP без успеха).

Когда Project/Options/Application/Время воспроизведения Темы установлен NONE:

=>

Сохранить диалог работает хорошо (быстро), но диалоговое окно старого стиля показано, как таковые ниже пример:

Example old style dialog

Этот exe хорошо работает на ПК с Windows 7 (хотя со старым диалогом стиля).

Ps. Мой старый exe-файл, скомпилированный с D2009 на ПК с Windows 7, отлично работает как на компьютерах Win 7, так и на 8 и показывает диалоги правильно, используя новый стиль диалога Vista.

Могут ли быть некоторые права на разрешение в Win 8/7, вызывающие это? Я использую IDE Fix Pack 5.4,

Спасибо, Томас

+0

Ваши окна свежие или что-либо установлено? например, TeamViewer вмешивался в диалоги XE2 (но это заставляло их отставать на несколько секунд при закрытии, а не открывать). Возможно, даже некоторые видеодрайверы, имеющие функции управления макетами таких окон, как AMD HydraVision, могут помешать –

+0

Это происходит в режиме Release или Debug только? –

+0

Изменяется ли поведение, если вы работаете без IDE? –

ответ

0

я обнаружил, что проблема есть. Я использую {$ MAXSTACKSIZE $ 4000000}, и это заставляет диалог сохранения замораживаться около минуты. Причина этого большого размера стека заключается в том, что я использую рекурсивный алгоритм (который мне теперь, вероятно, нужно переделать).

ВОПРОИЗВЕДЕНИЕ следующим образом (XE2):

  1. Создать новый VCL формы заявок
  2. Поместите TSaveDialog1 на форму
  3. Поместите TButton с OnClick событие

`

Begin 
    if SaveDialog1.Execute then  
    MessageDlg('ok', mtInformation,[mbOk], 0); 
end; 

`

4: Откройте исходный файл проекта и добавьте следующие строки:

// {$ MAXSTACKSIZE $ 3500000} // это десятичное значение 5 5574 528 OK!

{$ MAXSTACKSIZE $ 4000000} // это десятичное значение 6 7108 864 Не в порядке!

Запустите и нажмите кнопку. Дайте имя фиктивного файла и нажмите save. Ничего не произошло. Продолжайте нажимать кнопку в течение 60 секунд. Диалог, наконец, завершится.

Изменить размер меньшего стека $ 3500000. Теперь программа работает хорошо. Спасибо за все советы.

Смежные вопросы