Добавлена функция CreateCollectionEnumerator для создания перечислителя коллекций, полученных от OLE-объектов

Сделано в версии 3.1.5.9 от 29.12.2021 в altAwin

Нативные коллекции нормально работают только VisualBasic, поскольку для них предусмотрен стандартный цикл For Each. Для возможности получения элементов коллекции добавлена функция CreateCollectionEnumerator, создающая объект перечислителя.


function GetDirFiles(Dir: string; NameOnly: Boolean = False): TStrings;
var
  FileSystemObject, Folder, File: Variant;
  Enum: IcmVariantCollectionEnumerator;
begin
  Result := TStringList.Create;
  if not DirectoryExists(Dir) then
    Exit;

  FileSystemObject := CreateOleObject('Scripting.FileSystemObject');
  Folder := FileSystemObject.GetFolder(Dir);
  Enum := CreateCollectionEnumerator(Folder.Files);
  while Enum.MoveNext do
  begin
    File := Enum.Current;
    if NameOnly then
      Result.Add(File.Name)
    else
      Result.Add(File.Path);
  end;
end;

var
  Files: TStrings;
begin
  Files := GetDirFiles('c:\temp');
  try
    ShowMessage(Files.Text);
  finally
    Files.Free;
  end;
end.
Скрипты