在显示保存对话框时,我想挂钩用户的过滤器类型更改并自动更改文件扩展名. (例如像MSPaint的“另存为”操作.)
使用TSaveDialog并设置UseLatestCommonDialogs:= False,
我可以通过以下代码处理此问题. (没有最新的公共对话支持,cource.)
procedure TForm1.SaveDialog1TypeChange(Sender: TObject); var FName,Ext: string; begin with TSaveDialog(Sender) do begin if DirectoryExists(FileName) then // FileName is Empty exit; case FilterIndex of 1: Ext := '.png'; 2: Ext := '.bmp'; 3: Ext := '.jpg'; end; FName := ChangeFileExt(ExtractFileName(FileName),Ext); SendMessage(Windows.GetParent(Handle),CDM_SETCONTROLTEXT,1152,LongInt(PChar(FName))); end; end;
我想用Delphi 2007支持XP和vista / 7.
我应该使用TFileSaveDialog而不是TSaveDialog与内部包装?
(而且我必须使用IFileDialogControlEvents来解决COM编程问题?)
或者我可以用TFileSaveDialog实现这一点,它只是标准属性吗?
(我的开发环境仍然在XP机器上,所以我从未尝试过.抱歉.)
解决方法
据我所知,TFileSaveDialog将在XP上引发异常.它需要Vista或更高版本.
更新:TFileSaveDialog的一些D2010代码改编自您的事件处理程序….
(我在Vista上没有D2007;使用PWideChar而不是PChar)
procedure TForm1.FileSaveDialog1TypeChange(Sender: TObject); var FName,Ext: string; pName: PChar; begin with TFileSaveDialog(Sender) do begin if DirectoryExists(FileName) then // FileName is Empty exit; case FileTypeIndex of 1: Ext := '.png'; 2: Ext := '.bmp'; 3: Ext := '.jpg'; end; Dialog.GetFileName(pName); FName := ChangeFileExt(ExtractFileName(pName),Ext); Dialog.SetFileName(PChar(FName)); end; end;
FileSaveDialog的位置是:
object FileSaveDialog1: TFileSaveDialog FavoriteLinks = <> FileTypes = < item DisplayName = 'png files' FileMask = '*.png' end item DisplayName = 'bmp files' FileMask = '*.bmp' end item DisplayName = 'jpg files' FileMask = '*.jpg' end> Options = [] OnTypeChange = FileSaveDialog1TypeChange end