讓我們假設你想要的是標記修改的編輯器緩衝區。假設有一個編輯器緩衝區可以修改,在大多數情況下,對於項目中的大多數項目來說,這是不存在的。讓我們假設你始終打開項目中的每個文件,然後也許你可以用這種方式調整這些打開的單元。
我的想法是,您實際上不僅需要標記修改的編輯器緩衝區,而且還需要接觸由於#define更改而需要重建的磁盤上的所有文件。
要知道哪些文件受到影響,您需要閱讀所有文件。我認爲,你一次又一次地可靠地做這件事的可能性,比做一件建築材料的速度要快很多。
但是,如果您確實決定採用它,則不僅需要修改緩衝區已修改標誌,還需要修改當前項目組中的任何其他文件,或者包含在搜索或庫路徑中的文件夾,找到任何可能受到影響的文件。
您可以看到,也許這比您第一次想到的要複雜。
而且,就OTA而言,這裏是IOTAEditor屬性,Modified,它是隻讀的。
的OTA不希望你改變它:
IOTAEditor = interface(IUnknown)
['{F17A7BD0-E07D-11D1-AB0B-00C04FB16FB3}']
...
function GetModified: Boolean;
..
property Modified: Boolean read GetModified;
..
end;
但你實際上可以修改緩衝區內容本身,這將設置標誌。
使用IOTAEditorContent,獲取內容(IStream),修改它(添加空格),然後再次修改它(刪除空格)。現在你已經設置了髒位(爲了運氣,調用GetModified)。
我發現從JCL JclStackTraceViewerStackCodeUtils.pas一些示例代碼,展示瞭如何使用閱讀編輯內容IOTAEditorContent:
3210
後重新閱讀你的問題,在我看來,你只是想紀念打開的編輯器緩衝區全部改變,然後進行編譯,以提高速度。所以你可能想要做到這一點:拿上面的代碼,使用Supports()獲取IOTAEditorContent,並調整每一個。
更新:簡短和甜美的版本:修改緩衝區是不夠的。另外,您不需要爲需要更改的文件設置緩衝區,再加上觸摸磁盤上的文件不會達到您想要的效果。所以不,你不能做你想做的事。即使您可以以某種方式修改編譯器對Make-style依賴性和修改檢查的功能,您可能會在IDE中導致很多問題。
+1;好問題。 – 2011-03-31 19:29:42
您是否嘗試更改(「觸摸」)磁盤上的文件日期時間? – 2011-04-05 15:35:38
是的,我喜歡。如果我最小化IDE並在最大化IDE後詢問文件是否被修改並詢問是否要重新打開它,會發生什麼情況。如果我說我想,在下次編譯時,這些單元將被重新編譯。但是,如果我沒有這樣做,這是行不通的:/任何想法讓我知道,我測試並在這裏張貼結果。 Tks – 2011-04-05 19:38:03