Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Смена расширения файлов в TSaveDialog для разных версий Windows в Delphi 2007

Delphi , Программа и Интерфейс , Диалоги и Фреймы

Вопрос, поставленный пользователем, связан с необходимостью автоматически изменять расширение файла при смене типа файла в диалоге сохранения файла в операционных системах Vista и Windows 7. Разработчик использует компонент TSaveDialog и хочет поддерживать работу в среде XP, а также в Vista/7 с использованием Delphi 2007.

Решение проблемы

Для решения этой задачи можно использовать обработчик события TypeChange компонента TSaveDialog. Важно установить свойство UseLatestCommonDialogs в False, чтобы использовать старые диалоги, совместимые с XP. Вот пример кода, который автоматически изменяет расширение файла в зависимости от выбранного типа файла:

procedure TForm1.SaveDialog1TypeChange(Sender: TObject);
var
  FName, Ext: string;
begin
  with TSaveDialog(Sender) do
  begin
    if DirectoryExists(FileName) then // Проверка, что имя файла не пустое
      exit;
    case FilterIndex of
      1: Ext := '.png';
      2: Ext := '.bmp';
      3: Ext := '.jpg';
    end;
    FName := ChangeFileExt(ExtractFileName(FileName), Ext);
    SendMessage(Windows.GetParent(Handle), CDM_SETCONTROLTEXT, 1152, LongInt(PChar(FName)));
  end;
end;

Для поддержки операционных систем, начиная с Vista, можно использовать TFileSaveDialog, но это потребует работы с COM-интерфейсами, что может быть сложно. Однако, есть информация, что TFileSaveDialog вызовет исключение на XP, так что для поддержки различных версий Windows может потребоваться динамическое переключение между TSaveDialog и TFileSaveDialog в зависимости от версии операционной системы.

Альтернативное решение

В качестве альтернативного решения можно использовать класс-помощник для изменения расширения файла в обработчике события OnTypeChangeEvent компонента TSaveDialogWrapper. Это решение будет работать начиная с Delphi 2009, так как в Delphi 2007 класс-помощники не могут обращаться к приватным полям.

procedure TForm1.DialogTypeChange(Sender: TObject);
var
  xFN: WideString;
  xFileName: PWideChar;
  xFD: TFileDialogWrapper;
  xFilterIndex: UINT;
begin
  if Sender is TOpenDialog then
  with TOpenDialog(Sender) do begin
    xFD := GetInternalWrapper;
    if (xFD <> nil) and (xFD.FFileDialog <> nil) then begin
      // Код для Vista диалога сохранения файла
      // ...
    end else begin
      // Код для старых диалогов
      // ...
    end;
  end;
end;

Также стоит отметить, что если установить свойство DefaultExt компонента TSaveDialog, Delphi и Windows автоматически позаботятся об изменении расширения файла, и дополнительные действия в обработчике события OnTypeChange не потребуются.

Заключение

Для реализации автоматической смены расширения файла в диалоге сохранения в Delphi 2007 можно использовать обработчик события TypeChange компонента TSaveDialog или TFileSaveDialog с учетом версий операционной системы. Важно также рассмотреть возможность использования класса-помощника для работы с приватными полями и установки свойства DefaultExt для автоматического управления расширением файла.

Создано по материалам из источника по ссылке.

Пользователь столкнулся с задачей автоматизации изменения расширения файла в диалоге сохранения в среде Delphi 2007 для различных версий Windows, включая XP, Vista и Windows 7.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Диалоги и Фреймы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 16:02:34/0.0036540031433105/0