Установить файл как измененный с помощью OTA - PullRequest
1 голос
/ 31 марта 2011

Как мы знаем, Build компилирует все используемые модули, а Compile компилирует только измененные использованные модули.Но когда вы работаете с ifdefs и вам нужно много раз его менять, вы должны многократно создавать проект.Если вам нужно много библиотек, о которых вы знаете, что этот IFDEF не изменит поведение, нет причин для повторного создания этой библиотеки.

То, что я хочу сделать для обнаружения, - это способ сказать IDE, чтофайлы были изменены и вызывают компиляцию, а не сборку.

Как получить единицы измерения и все остальное, что я знаю, но некоторые знают, как настроить модуль как измененный?

Tks


Не могу найти причину, чтобы решить мою проблему.Я нашел способ установить его как измененный, проблема в том, что он не заставляет IDE создавать его так, как я думал.Кто-нибудь знает, какие проверки производятся для отправки в архив для компиляции?

Ответы [ 3 ]

0 голосов
/ 04 апреля 2011

В интерфейсе IOTAModule70 = (IOTAModule50) я найду MarkModified: Описание: {MarkModifed пометит этот модуль как «измененный», фактически не указав , почему изменился (что приведет к сохранению дат внутреннего файла)константа).Это будет заставлять IDE запрашивать сохранение этого модуля, когда пользователь пытается закрыть его.Это также очистит «отбрасываемость» нового безымянного модуля, например, когда выбран File | New | Application.}

0 голосов
/ 06 апреля 2011

Решено проще. Я просто удалил DCU файла, и он снова скомпилируется. : D http://paste.ideaslabs.com/show/KCB9cq2Z8c

0 голосов
/ 31 марта 2011

Предположим, что вы хотите пометить измененные буферы редактора.Это предполагает наличие редактирующего буфера, который в большинстве случаев отсутствует, для большинства элементов в вашем Проекте.Давайте предположим, что у вас ВСЕГДА всегда открыт каждый файл в вашем проекте, тогда, возможно, вы можете настроить эти открытые блоки таким образом.

Я думаю, что вам на самом деле нужно будет не только пометить измененные буферы редактора,но также ПРИКАСАЙТЕСЬ ко всем файлам на диске, которые необходимо будет восстановить из-за изменения #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.

...