delphi – (保存对话框)如何在Vista / Win7中更改文件过滤器时自动更改文件扩展名?

前端之家收集整理的这篇文章主要介绍了delphi – (保存对话框)如何在Vista / Win7中更改文件过滤器时自动更改文件扩展名?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
显示保存对话框时,我想挂钩用户的过滤器类型更改并自动更改文件扩展名. (例如像MSPaint的“另存为”操作.)

使用TSaveDialog并设置UseLatestCommonDialogs:= False,
我可以通过以下代码处理此问题. (没有最新的公共对话支持,cource.)

  1. procedure TForm1.SaveDialog1TypeChange(Sender: TObject);
  2. var
  3. FName,Ext: string;
  4. begin
  5. with TSaveDialog(Sender) do
  6. begin
  7. if DirectoryExists(FileName) then // FileName is Empty
  8. exit;
  9. case FilterIndex of
  10. 1: Ext := '.png';
  11. 2: Ext := '.bmp';
  12. 3: Ext := '.jpg';
  13. end;
  14. FName := ChangeFileExt(ExtractFileName(FileName),Ext);
  15. SendMessage(Windows.GetParent(Handle),CDM_SETCONTROLTEXT,1152,LongInt(PChar(FName)));
  16. end;
  17. end;

我想用Delphi 2007支持XP和vista / 7.

我应该使用TFileSaveDialog而不是TSaveDialog与内部包装?
(而且我必须使用IFileDialogControlEvents解决COM编程问题?)

或者我可以用TFileSaveDialog实现这一点,它只是标准属性吗?
(我的开发环境仍然在XP机器上,所以我从未尝试过.抱歉.)

我认为这是非常常见的任务,但我找不到任何支持Vista / 7的示例代码……

解决方法

据我所知,TFileSaveDialog将在XP上引发异常.它需要Vista或更高版本.

更新:TFileSaveDialog的一些D2010代码改编自您的事件处理程序….
(我在Vista上没有D2007;使用PWideChar而不是PChar)

  1. procedure TForm1.FileSaveDialog1TypeChange(Sender: TObject);
  2. var
  3. FName,Ext: string;
  4. pName: PChar;
  5. begin
  6. with TFileSaveDialog(Sender) do
  7. begin
  8. if DirectoryExists(FileName) then // FileName is Empty
  9. exit;
  10. case FileTypeIndex of
  11. 1: Ext := '.png';
  12. 2: Ext := '.bmp';
  13. 3: Ext := '.jpg';
  14. end;
  15. Dialog.GetFileName(pName);
  16. FName := ChangeFileExt(ExtractFileName(pName),Ext);
  17. Dialog.SetFileName(PChar(FName));
  18. end;
  19. end;

FileSaveDialog的位置是:

  1. object FileSaveDialog1: TFileSaveDialog
  2. FavoriteLinks = <>
  3. FileTypes = <
  4. item
  5. DisplayName = 'png files'
  6. FileMask = '*.png'
  7. end
  8. item
  9. DisplayName = 'bmp files'
  10. FileMask = '*.bmp'
  11. end
  12. item
  13. DisplayName = 'jpg files'
  14. FileMask = '*.jpg'
  15. end>
  16. Options = []
  17. OnTypeChange = FileSaveDialog1TypeChange
  18. end

猜你在找的Delphi相关文章