Диалоговое окно открытия файла со списком кодировок в Vista
-
21-08-2019 - |
Вопрос
В настоящее время я использую TOpenTextFileDialog, поскольку у него есть опция Encodings , но в Vista он отображается с использованием более старого стиля open dialog.Я бы хотел открыть диалоговое окно в новом стиле, но со списком кодировок, который я могу заполнить пользовательскими строками.По сути, мне нужно точное диалоговое окно открытия, которое показывает Notepad в Vista.Конечно, мне также нужно соответствующее диалоговое окно сохранения.
Я провел некоторое исследование, и кажется, что флаг OFN_ENABLETEMPLATE приводит к тому, что диалоговое окно Vista common возвращается к старому стилю.К сожалению, это также флаг, который позволяет TOpenTextFileDialog изменять окно, чтобы добавить выпадающий список кодировок (если я все правильно понимаю).
Есть ли у кого-нибудь предложения о том, как получить то, что я хочу, под Vista, но при этом заставить это работать под XP?Я предполагаю, что Windows 7 будет иметь ту же проблему.Я использую D2009.Спасибо за любые предложения или помощь!
Решение
В Vista появился новый способ работы с диалоговыми окнами файлов, для получения дополнительной информации воспользуйтесь Google для IFileDialog
интерфейс или взгляните на это сообщение в блоге.Как вы сами говорите, используя OFN_ENABLETEMPLATE
флаг приводит к возврату общего диалогового окна Vista к старому стилю.
С Delphi 2007 и 2009 вы можете использовать TFileOpenDialog
и TFileSaveDialog
в Диалоговые окна Vista категория компонентов.Чтобы сделать ваше приложение совместимым с версиями Windows, выпущенными до Vista, вам следует продолжать использовать TOpenTextFileDialog
для них и проверьте во время выполнения, используете ли вы Vista и можете ли использовать новые диалоговые окна:
if Win32MajorVersion >= 6 then begin
// use TFileOpenDialog
// ...
end else begin
// use TOpenTextFileDialog
// ...
end;
Теперь вам нужно только добавить настройку в диалоговое окно Vista. Запись в блоге показывает, как это сделать, добавив обработчик для OnExecute
из диалогового окна (потому что в то время, когда это вызывается IFileDialog
интерфейс уже настроен), запрашивая Dialog
элемент диалогового окна файла для IFileDialogCustomize
интерфейс, и используя это для добавления дополнительных элементов управления.