如果知道文件扩展名如何在TFileSaveDialog DoExecute事件中将扩展名转换为FileTypeIndex?
function TIEWin7FileSaveDialog.DoExecute: Bool;
begin
...
{Set FileType (filter) index}
iWideTextension := ExtractFileExt(FileName);
FileTypeIndex := ???ExtensionToFileTypeIndex(iWideExtension);???
FileDialog.SetFileTypeIndex(FileTypeIndex);
...
end;
答案 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;