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

Как добавить чекбокс в TSaveDialog в Delphi 2010 для Windows XP до Windows 7

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

Как добавить чекбокс в TSaveDialog в Delphi 2010

При разработке приложений на Delphi часто возникает потребность в расширении стандартных диалогов, таких как TSaveDialog, добавлением пользовательских компонентов, например, чекбоксов. В версии Delphi 2010, если вы хотите использовать современные диалоги открытия и сохранения файлов, реализованные через интерфейсы IFileOpenDialog и IFileSaveDialog, вам потребуется воспользоваться компонентами FileOpenDialog и FileSaveDialog. Однако, если глобальный параметр UseLatestCommonDialogs установлен в истину, стандартные диалоги OpenDialog и SaveDialog также будут использовать новый стиль.

Описание проблемы

Пользователь Tom столкнулся с проблемой добавления чекбокса в диалог сохранения файла TSaveDialog в Delphi 2010. Он не знаком с программированием интерфейсов и не хочет использовать сторонние инструменты. Вопрос заключается в поиске решения, которое будет работать на системах от Windows XP до Windows 7.

Подход к решению

Роберт (Robert) предложил использовать диалоговый шаблон. Для этого необходимо сначала сохранить шаблон в ресурсах приложения, затем загрузить его с помощью структуры TOpenFilename и, наконец, вызвать функцию GetSaveFileName, передав структуру TOpenFilename.

Пример реализации

Создайте файл ресурсов SaveDialog.rc с диалоговым шаблоном, добавив в него чекбокс:

MYSAVEFILE DIALOG -1, 1, 300, 60
STYLE DS_3DLOOK | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS
CAPTION ""
FONT 8, "Tahoma"
{
CONTROL "MyCheckBox", 666, "button", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 84, 19, 60, 12
}

Вот пример исходного кода на Object Pascal:

Uses
 CommDlg;
{$R *.dfm}
{$R SaveDialog.Res}

var
  lpofn: TOpenFilename;
  lpstrFile: array[0..MAX_PATH-1] of Char;

function _lpfnHook(hdlg: HWND; uiMsg: UINT; wParam: WPARAM; lParam: LPARAM): UINT; stdcall;
begin
  Result := 0;
  case uiMsg of
    // Установить начальное состояние чекбокса в состояние отмеченного
    WM_INITDIALOG: CheckDlgButton(hdlg, 666, BST_CHECKED);
    WM_COMMAND:
      case wParam of
        666:
          begin
            if (IsDlgButtonChecked(hdlg, 666) = BST_CHECKED) then
              ShowMessage('Чекбокс был отмечен')
            else
              if (IsDlgButtonChecked(hdlg, 666) = BST_UNCHECKED) then
                ShowMessage('Чекбокс был снят');
          end;
      end;
  end;
end;

procedure TFrmMain.Button1Click(Sender: TObject);
begin
  ZeroMemory(@lpofn, SizeOf(lpofn));
  lpofn.lStructSize := SizeOf(lpofn);
  lpofn.hwndOwner := Handle;
  lpofn.hInstance := hInstance;
  // Установить имя фильтра
  lpofn.lpstrFilter := 'Все файлы (*.*)'#0'*.*'#0#0;
  lpofn.lpstrTitle := 'Сохранить как';
  lpofn.lpstrFile := lpstrFile;
  lpofn.nMaxFile := MAX_PATH;
  // Установить имя шаблона
  lpofn.lpTemplateName := 'MYSAVEFILE';
  // Установить функцию обратного вызова
  lpofn.lpfnHook := _lpfnHook;
  lpofn.Flags := OFN_EXPLORER or OFN_CREATEPROMPT or OFN_HIDEREADONLY or
    OFN_PATHMUSTEXIST or OFN_ENABLEHOOK or OFN_ENABLETEMPLATE;
  // Выполнить диалог
  if GetSaveFileName(lpofn) then ShowMessage(lpofn.lpstrFile);
end;

Альтернативный подход для Vista/7

Для систем Vista и Windows 7 рекомендуется использовать IFileDialogCustomize, что позволит избежать использования устаревших диалогов. Однако для поддержки Windows XP все равно потребуется реализация с использованием шаблона.

Заключение

Добавление чекбокса в диалог сохранения TSaveDialog в Delphi 2010 возможно с использованием диалогового шаблона и ресурсов. Приведенный пример кода демонстрирует, как это можно сделать, и показывает итоговый диалог с чекбоксом.

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

Пользователь хочет добавить чекбокс в стандартный диалог сохранения файла TSaveDialog в Delphi 2010, используя ресурсный файл диалогового шаблона для поддержки систем от Windows XP до 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-10 18:41:50/0.0036430358886719/0