Tho*_*mas 8 delphi vcl-styles delphi-10.1-berlin
在主窗体上添加一个Tbutton和一个TSaveDialog
在SaveDialog1的属性中将"ofOverwritePrompt"设置为True
使用:
procedure TForm1.Button1Click(Sender: TObject);
begin
SaveDialog1.Execute();
end;
Run Code Online (Sandbox Code Playgroud)运行应用程序.按按钮执行保存对话框.尝试保存到已存在的文件.如果要替换文件,则会出现一个消息框.按取消.到目前为止都很好.关闭应用程序.
转到项目/选项/应用程序/外观并选择自定义样式(例如Amakrits).将Amakrits设置为默认样式.
(使用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是好的):
您可以使用项目的对话框样式代码来避免此问题VCL Styles Utils。
只需将这些单元添加到您的项目中即可。
uses
Vcl.Styles.Utils.Menus, //Popup and Shell Menus (class #32768)
Vcl.Styles.Utils.Forms, //dialogs box (class #32770)
Vcl.Styles.Utils.StdCtrls, //buttons, static, and so on
Vcl.Styles.Utils.ComCtrls, //SysTreeView32, SysListView32
Vcl.Styles.Utils.ScreenTips, //tooltips_class32 class
Vcl.Styles.Utils.SysControls,
Vcl.Styles.Utils.SysStyleHook;
{$R *.dfm}
procedure TForm26.Button1Click(Sender: TObject);
begin
UseLatestCommonDialogs := false;
SaveDialog1.Execute();
end;
Run Code Online (Sandbox Code Playgroud)