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

FileTypes1 つのファイル タイプが複数のファイル タイプ マスクに含まれている可能性があるため、少なくとも必要なことを行う明示的な関数はありません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 に答える