如果扩展名已知,如何在DoExecute TFileSaveDialog事件中设置FileTypeIndex?

时间:2012-11-26 18:48:34

标签: delphi delphi-2010

如果知道文件扩展名如何在TFileSaveDialog DoExecute事件中将扩展名转换为FileTypeIndex?

   function TIEWin7FileSaveDialog.DoExecute: Bool;
    begin
    ...
    {Set FileType (filter) index}
    iWideTextension := ExtractFileExt(FileName);
    FileTypeIndex := ???ExtensionToFileTypeIndex(iWideExtension);???
    FileDialog.SetFileTypeIndex(FileTypeIndex);
    ...
    end;

1 个答案:

答案 0 :(得分:2)

由于一个文件类型可能包含在更多文件类型掩码中,因此没有显式函数可以执行您想要的操作,因此您只能迭代FileTypes并检查文件类型是否包含或等于FileMask如下所示:

function FindFirstFileType(FileDialog: TCustomFileDialog;
  const FileExt: string): UINT;
var
  TypeIndex: Integer;
  ExtIndex: Integer;
  ExtArray: TStringDynArray;
begin
  Result := 0;
  for TypeIndex := 0 to FileDialog.FileTypes.Count - 1 do
  begin
    ExtArray := SplitString(FileDialog.FileTypes[TypeIndex].FileMask, ';');
    for ExtIndex := 0 to High(ExtArray) do
      if ExtArray[ExtIndex] = FileExt then
        begin
          Result := TypeIndex;
          Break;
        end;
  end;
end;

用法(注意输入必须与过滤器掩码完全匹配):

procedure TForm1.Button1Click(Sender: TObject);
var
  I: UINT;
begin
  I := FindFirstFileType(FileOpenDialog1, '*.pas');
end;
相关问题