3

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

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

1 回答 1

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;
于 2012-11-26T19:29:41.263 回答