Я работаю над расширением для Delphi и хочу получить список всех открытых файлов в IDE,
так, как указано в списке буферов, если я нажму Ctrl + B.
Я попробовал два метода, но в них перечислены только файлы, содержащиеся в проекте расширения, даже если в группу проектов этот проект не входит.
class function IOTAUTils.GetOpenedEditorFiles : TArray<string>;
var
module : IOTAModule;
editor : IOTAEditor;
service : IOTAModuleServices;
begin
Result := [];
service := (BorlandIDEServices as IOTAModuleServices);
if Assigned(service) then begin
for var i := 0 to service.ModuleCount - 1 do begin
module := service.Modules[i];
for var j := 0 to module.GetModuleFileCount - 1 do begin
editor := module.GetModuleFileEditor(j);
Result := Result + [editor.FileName];
end;
end;
end;
end;
По крайней мере, я могу отфильтровать невидимые открытые файлы с помощью этого подхода: EditViewCount > 0
class function IOTAUTils.GetOpenedEditBuffers: TArray<string>;
var
service : IOTAEditorServices;
it : IOTAEditBufferIterator;
buffer : IOTAEditBuffer;
begin
Result := [];
service := (BorlandIDEServices as IOTAEditorServices);
if Assigned(service) then begin
if (service.GetEditBufferIterator(it)) then begin
for var i := 0 to it.Count - 1 do begin
buffer := it.EditBuffers[i];
if buffer.EditViewCount > 0 then begin // if view count = 0, it is not shown between tabs
Result := Result + [buffer.FileName];
end;
end;
end;
end;
end;
Как правильно получить желаемый список открытых файлов?





После некоторого сна и перезагрузки IDE и ПК, второй метод выше.
IOTAUtils.GetOpenedEditBuffers
все еще работает так, как ожидалось.