如何阻止Embarcadero C++Builder频繁修改DFM中的位图代码?
解决C++Builder IDE随机修改DFM文件中TImageList位图的问题
针对你遇到的IDE随机改写DFM里TImageList二进制位图、导致Git频繁出现无效差异的问题,给你几个实用的解决办法:
把图像列表资源移到外部文件
别让TImageList的位图数据存在DFM里,改成用外部文件存储,然后在代码里动态加载。比如先用IDE的ImageList编辑器把图像导出成.ilb格式的图像列表文件,然后在Form的OnCreate事件里加载:void __fastcall TForm1::FormCreate(TObject *Sender) { ImageList1->LoadFromFile(L"icons.ilb"); }这样DFM里只会保留ImageList的基础属性,不会包含二进制位图数据,自然不会被IDE乱改。
调整IDE的DFM保存设置
- 先把DFM改成文本格式保存:在IDE里打开DFM文件,通过
File > Save As选择保存类型为「Text DFM (*.dfm)」,文本格式的DFM不仅Git更易跟踪,IDE也更少出现莫名其妙的二进制改写。 - 去项目属性里找「Form Options」或「DFM Options」(不同版本位置略有差异),取消勾选和自动生成资源、优化DFM相关的选项,减少IDE自动修改DFM的概率。
- 先把DFM改成文本格式保存:在IDE里打开DFM文件,通过
用Git过滤器过滤无效差异
给Git加个过滤器,提交DFM时自动移除TImageList的Bitmap行,拉取时保持原样。步骤如下:- 在项目根目录的
.gitattributes文件里添加:*.dfm filter=dfmclean - 在你的全局
.gitconfig或者项目本地的.git/config里添加过滤器定义:[filter "dfmclean"] clean = sed '/^ *Bitmap = /d' smudge = cat
注意:如果之后真的需要修改图像列表,得手动跳过这个过滤器,避免丢失修改内容。
- 在项目根目录的
升级到最新稳定版C++Builder
这个随机修改DFM的问题大概率是旧版本IDE的bug,官方后续版本可能已经修复了这个问题,升级到最新稳定版说不定直接解决。
内容的提问来源于stack exchange,提问作者powerpete
相关产品推荐
相关产品推荐

