-
创建一个新的VCL Forms应用程序
-
在主窗体上添加Tbutton和TSaveDialog
-
在SaveDialog1的属性中将“ofOverwritePrompt”设置为True
-
使用:
procedure TForm1.Button1Click(Sender: TObject);
begin
SaveDialog1.Execute();
end;
-
运行应用程序 . 按按钮执行保存对话框 . 尝试保存到已存在的文件 . 如果要替换文件,则会出现一个消息框 . 按取消 . 到目前为止都很好 . 关闭应用程序 .
-
转到项目/选项/应用程序/外观并选择自定义样式(例如Amakrits) . 将Amakrits设置为默认样式 .
-
运行应用程序,如上面的#5 . 只会显示消息框的一小部分 . 您必须按Enter键才能继续 .
(使用TFileSaveDialog会得到相同的结果)
如果我使用Delphi XE8编译并运行应用程序就可以了,因为即使选择了另一种样式,保存对话框窗口似乎也使用默认的窗口样式 .
编辑:我有Windows 10专业版 . 使用Delphi 10.1 Berlin编译为win32的源代码 . 替换消息框部分隐藏 . 仅显示左上方的小部分,请参见图 .
这里用XE8 win32编译:
PS . 我使用默认的100%比例因子 .
使用win64(Delphi 10.1 Berlin)编译似乎没问题:
因此,编译为win32对我来说不起作用,但64位会 . 有线索吗?
编辑:尝试使用“GetSaveFileName(OFN)”也不适合我在win32(胜利64是好的):
4 回答
您可以使用VCL Styles Utils项目的对话框样式代码来避免此问题 .
只需将这些单位添加到您的项目中 .
我无法确认这个问题,所有这些看起来都很好,(32位执行,以Amakrits为主题,使用10.1柏林编译,在Windows 7上,100%缩放)但你可以试试这个:
结果是以Amakrits为主题的新的类似资源管理器的保存对话框,对我来说效果很好 . 只有对话框左上角的两个圆形蓝色"back"和"forth"(
<-
和->
)按钮看起来有点奇怪 .但我没有尝试使用自定义缩放设置(例如,控制面板中的中等125% - >显示面板等) . 我认为这可能会影响这些事情 .
更新
我只是尝试使用自定义显示缩放(125%)的
SaveDialog1
(用上面的OFN代码注释掉) . 一切都很好看,所以不是这样 . 此外,当我使用OFN代码时,一切看起来都很好(实际上,更好,即没有XP风格的对话框,而是一个真正的类似资源管理器的对话框) .如果我在Project / Options / Application中将“Enable High-DPI”设置为true,它将起作用(替换正确显示的框) . 禁用它将导致问题(在win32和win64中) .
为了记录,我有完全相同的问题(Delphi 10.1柏林,在Windows 10 64位编译,100%屏幕设置,编译为32位目标) . 启用或禁用高DPMI感知没有帮助 .
解决方法是在执行TSaveDialog(或TOpenDialog)之前禁用对话框的样式,如下所示:
文件对话框本身仍然是主题 . 如果弹出覆盖提示(或创建提示),您将获得标准的Windows样式消息框,但它们足够大,用户可以阅读并单击它们 . 文件对话框完成后,如果需要,可以通过将shDialogs重新添加到SystemHooks来再次启用样式化对话框 .