我正在使用组合框通过以下代码更改样式:
procedure TFramePreferences.cbGUISkinChange(Sender: TObject);
begin
if cbGUISkin.ItemIndex >= 0 then
TStyleManager.SetStyleFromFile(cbGUISkin.Selected.Text);
end;
如果SetStyleFromFile仅被调用一次,则在退出时没有内存泄漏。但是,如果在加载样式后更改样式(一次或多次),则退出时会出现以下内存泄漏:
发生了意外的内存泄漏。意外的小块泄漏为:
1-12个字节。 TFmxChildrenList x 1
21-28个字节:TGradientPoint x 4,TGradientPoints x 2,UnicodeString x 4 29-36个字节:TBitmapImage x 2,TGradient x 2,TBrushBitmap x 2,TControlSize x 2,UnicodeString x 5
37-44字节:TBrushResource x 2,TFont x 1,TPosition x 20,UnicodeString x 1
45-52字节:TDictionary x 1,TBitmap x 2,TList x 2,TList x 1,TList x 1,TList x1,TBounds x 6,未知x 2
53-60字节:TBrush x 2,未知x3
69-76字节:TFransform x 2
101-108字节:未知x 1
133-140字节:TFontObject x 1,TBrushObject x 2
877-956字节:TLayout x 2
此方法的documentation说:“不要在项目中放置多行调用SetStyleFromFile的行,因为在样式管理器中只能有一个活动样式。”这可能是我问题的根源。我多次调用它,并且SetStyleFromFile高兴地加载了新样式,但是在退出时,出现内存泄漏。
如何实现能够从组合框选择中更改样式而又不会造成内存泄漏的目标?