我面临一个奇怪的问题。我在面板中有一组按钮,我想显示每个按钮的工具提示。为此,我正在使用TPopUp,但是每当鼠标进入时,我都能观察到该应用程序的内存正在增加。但是,如果我评论鼠标进入和鼠标离开事件,则内存不会增加。我错过了什么吗?
每当鼠标进入按钮时,我的任务管理器就会增加0.3MB。
date(2017, 12)
答案 0 :(得分:1)
TPopup
控件中存在错误。报告为RSP-21438
TPopup
内部创建新的TCustomPopupForm
。但是,该窗体不会在弹出窗口关闭时释放(应该如此),而只有在弹出控件本身被破坏时才会释放。
解决方法很少
1。在打开时创建新的TPopup控件,并在关闭时将其释放
2。修复FMX.Controls
和FMX.Forms
可以在上述单元的实现部分中修复错误。这意味着您可以将FMX.Controls
和FMX.Forms
复制到项目文件夹中,Delphi将使用这些固定单位代替默认单位。
修复以下代码:
FMX.Controls -将构造函数参数从False
更改为True
-这意味着弹出式窗体将在关闭时自动释放。
function TPopup.CreatePopupForm: TFmxObject;
...
NewForm := TCustomPopupForm.Create(Self, NewStyle, PlacementTarget, True);
FMX.Forms -将AutoFree
参数分配给字段。
constructor TCustomPopupForm.Create(AOwner: TComponent; AStyleBook: TStyleBook = nil; APlacementTarget: TControl = nil;
AutoFree: Boolean = True);
var
NewStyleBook: TStyleBook;
begin
FAutoFree := AutoFree;
....