让我们假设你想要的是标记修改的编辑器缓冲区。假设有一个编辑器缓冲区可以修改,在大多数情况下,对于项目中的大多数项目来说,这是不存在的。让我们假设你始终打开项目中的每个文件,然后也许你可以用这种方式调整这些打开的单元。
我的想法是,您实际上不仅需要标记修改的编辑器缓冲区,而且还需要接触由于#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