gpt4 book ai didi

delphi - 如何在 Delphi 2010 中向 TSaveDialog 添加复选框

转载 作者:行者123 更新时间:2023-12-03 14:40:57 25 4
gpt4 key购买 nike

我想向 TSaveDialog 添加一个复选框或其他 VCL 组件。

坎图说,

The new Vista Open and Save dialog boxes (implemented by the IFileOpenDialog and
IFileSaveDialog interfaces) are directly mapped by the new FileOpenDialog and
FileSaveDialog components, but also the standard OpenDialog and SaveDialog component uses
the new style when the global UseLatestCommonDialogs is set.

我不知道这意味着什么(我从未做过任何接口(interface)编程......)

而且我不想使用第三方工具。

我刚才在网络搜索中看到它建议,我查看了 TOpenPictureDialog 代码并复制了它。

在尝试任何路径之前,我想我应该在这里寻求一些指导。关于 XP 到 Win7 解决方案以独立于 Windows 版本的方式向现代文件、打开对话框添加复选框有什么建议吗?

汤姆

最佳答案

罗伯特,您可以使用对话框模板来做到这一点。

首先,您必须将模板存储为应用中的资源,然后使用 TOpenFilename 加载模板。结构(不用担心名称,打开和保存对话框是相同的),最后调用 GetSaveFileName函数传递 TOpenFilename 结构。

检查此示例

使用对话框模板创建一个资源文件(称为SaveDialog.rc)(查看添加的MyCheckBox)

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
}

这是源代码

Uses
CommDlg;

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

{$R *.dfm}
{$R SaveDialog.Res}

function _lpfnHook(hdlg: HWND; uiMsg:UINT;wParam:WPARAM;lParam:LPARAM): UINT stdcall;
begin
Result:=0;
case uiMsg of
// Set the initial state of mycheckbox to checked
WM_INITDIALOG : CheckDlgButton(hdlg,666,BST_CHECKED);
WM_COMMAND :
case wParam of
666:
begin
if (IsDlgButtonChecked(hdlg,666)=BST_CHECKED) then
ShowMessage('MyCheckBox was checked')
else
if (IsDlgButtonChecked(hdlg,666)=BST_UNCHECKED) then
ShowMessage('MyCheckBox was unchecked');
end;
end;
end;
end;

procedure TFrmMain.Button1Click(Sender: TObject);
begin
ZeroMemory(@lpofn,sizeof(lpofn));
lpofn.lStructSize := SizeOf(lpofn);
lpofn.hwndOwner := Handle;
lpofn.hInstance := hInstance;
//set the filter name
lpofn.lpstrFilter := 'All files (*.*)'#0'*.*'#0#0;
lpofn.lpstrTitle := 'Save As';
lpofn.lpstrFile := lpstrFile;
lpofn.nMaxFile := MAX_PATH;
//Set the template Name
lpofn.lpTemplateName :='MYSAVEFILE';
//set the callback function
lpofn.lpfnHook := _lpfnHook;
lpofn.Flags := OFN_EXPLORER or OFN_CREATEPROMPT or OFN_HIDEREADONLY or
OFN_PATHMUSTEXIST or OFN_ENABLEHOOK or OFN_ENABLETEMPLATE;
//execute the dialog
if GetSaveFileName(lpofn) then ShowMessage(lpofn.lpstrFile);
end;

这是输出

enter image description here

关于delphi - 如何在 Delphi 2010 中向 TSaveDialog 添加复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5918601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com