Предположим, что вы хотите пометить измененные буферы редактора.Это предполагает наличие редактирующего буфера, который в большинстве случаев отсутствует, для большинства элементов в вашем Проекте.Давайте предположим, что у вас ВСЕГДА всегда открыт каждый файл в вашем проекте, тогда, возможно, вы можете настроить эти открытые блоки таким образом.
Я думаю, что вам на самом деле нужно будет не только пометить измененные буферы редактора,но также ПРИКАСАЙТЕСЬ ко всем файлам на диске, которые необходимо будет восстановить из-за изменения #define.
Чтобы узнать, какие файлы затронуты, вам необходимо прочитать все файлы.Я думаю, что вероятность того, что вы будете делать это надежно, снова и снова и быстрее, чем просто строить, довольно мала.
Но если вы решили пойти на это, вам нужно не только изменить флаги Modified буфера, но также и для любого другого файла в текущей группе проектов, или который находится в папке, включенной в поиск илиПуть к библиотеке, найдите любой файл, который может быть затронут.
Возможно, вы видите, что это сложнее, чем вы думали вначале.
И, что касается OTA, вот свойство IOTAEditor, Modified, оно доступно только для чтения.
OTA не хочет, чтобы вы меняли его:
IOTAEditor = interface(IUnknown)
['{F17A7BD0-E07D-11D1-AB0B-00C04FB16FB3}']
...
function GetModified: Boolean;
..
property Modified: Boolean read GetModified;
..
end;
Но вы могли бы фактически изменить сам буфер CONTENT, и это установило бы флаг.
Используйте IOTAEditorContent, получите содержимое (IStream), измените его (добавьте пробел), затем измените его снова (уберите пространство).Теперь вы установили грязный бит (вызывайте GetModified просто для удачи).
Я нашел пример кода из JCL JclStackTraceViewerStackCodeUtils.pas, который показывает, как читать содержимое редактора с помощью IOTAEditorContent:
function GetFileEditorContent(const AFileName: string): IStream;
var
I: Integer;
Module: IOTAModule;
EditorContent: IOTAEditorContent;
begin
Result := nil;
Module := (BorlandIDEServices as IOTAModuleServices).FindModule(AFileName);
if Assigned(Module) then
begin
for I := 0 to Module.ModuleFileCount - 1 do
if Supports(Module.ModuleFileEditors[I], IOTAEditorContent, EditorContent) then
begin
Result := EditorContent.Content;
Break;
end;
end;
end;
После перечитывания вашего вопроса, мне кажется, что вы хотите пометить открытые буферы редактора как все измененные, а затем выполнить компиляцию для скорости.Поэтому вы можете захотеть сделать это: возьмите приведенный выше код, получите IOTAEditorContent с помощью Supports () и настройте каждый из них.
Обновление: краткая и приятная версия: изменение буфера недостаточно.Кроме того, у вас не будет буферов для файлов, которые вам нужно изменить, плюс прикосновение к файлу на диске не будет делать то, что вы хотите.Так что нет, вы не можете делать именно то, что хотели.И даже если бы вы могли как-то изменить способность компилятора выполнять проверки зависимостей и изменений в стиле Make, вы, вероятно, вызовете много проблем внутри IDE.