Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 如何使TSaveDialog定制dpi感知/可扩展?_Delphi_Topendialog - Fatal编程技术网

Delphi 如何使TSaveDialog定制dpi感知/可扩展?

Delphi 如何使TSaveDialog定制dpi感知/可扩展?,delphi,topendialog,Delphi,Topendialog,使用Delphi2010,我使用资源模板方法定制了一个TSaveDialog,如Delpi的ExtDlgs中的TOpenPictureDialog所示。 模板方法允许我在“系统保存”对话框中成功插入包含多个控件的表单。只要Windows DPI设置为96,该选项就可以正常工作。通过用户定义(文本)缩放或hdpi监视器,插入的表单仅部分可见。这当然是由于Form.Scaled=True导致包含控件的Form plus缩放(变大)。当前,模板文件(例如TOpenPictureDialog中使用的默认

使用Delphi2010,我使用资源模板方法定制了一个TSaveDialog,如Delpi的ExtDlgs中的TOpenPictureDialog所示。 模板方法允许我在“系统保存”对话框中成功插入包含多个控件的表单。只要Windows DPI设置为96,该选项就可以正常工作。通过用户定义(文本)缩放或hdpi监视器,插入的表单仅部分可见。这当然是由于Form.Scaled=True导致包含控件的Form plus缩放(变大)。当前,模板文件(例如TOpenPictureDialog中使用的默认文件)包含固定大小的对话框和静态文本元素,用于定义插入表单将占用的空间

我可以想出几个变通办法:

  • 无形式缩放(不是hdpi监视器的真正解决方案)
  • 根据屏幕提供不同的模板。PixelsPerInch/96:100%125%,150% 200%等)
  • 使用IFileDialogCustomize界面,但这对于我想要的东西来说还不够表达
最好的解决方案可能是在对话框加载模板之前在内存中调整模板大小(基于Screen.PixelsPerInch/96)。
有这样的东西吗?

听起来不太对。对话框资源使用相对于系统字体的单位系统。它应该尊重缩放。我不认为Scaled属性是相关的,该对话框是一个系统对话框,而不是Delphi表单。最后,IFileDialogCustomization机制允许您避免向用户展示那些可怕的15年前的xp遗留对话框。不是系统对话框不可伸缩:插入的自定义Delphi表单不适合模板创建的空间。如果没有Scaled=True,则表单的大小和适合性不正常。如前所述:IFileDialogCustomization不适用于我(其中一个是XP支持),在我必须支持XP的糟糕日子里,我使用XP模板,而IFileDialogCustomization适用于Vista+。然后,我没有把可怕的遗留对话框强加给我的所有用户。如果我是你,我就不会试图在那里塞进德尔菲表格。按预期方式使用对话框资源。如果必须使用非标准控件,则在Delphi中构建整个文件对话框。您当前的解决方案并不是使用本机文件对话框。您正在使用传统对话框。一个纯粹的Delphi文件对话框可能不会像现在这样刺耳。