Firemonkey-TPopUp内存问题

时间:2018-10-15 20:04:31

标签: delphi firemonkey delphi-10.2-tokyo

我面临一个奇怪的问题。我在面板中有一组按钮,我想显示每个按钮的工具提示。为此,我正在使用TPopUp,但是每当鼠标进入时,我都能观察到该应用程序的内存正在增加。但是,如果我评论鼠标进入和鼠标离开事件,则内存不会增加。我错过了什么吗?

每当鼠标进入按钮时,我的任务管理器就会增加0.3MB。

date(2017, 12)

1 个答案:

答案 0 :(得分:1)

TPopup控件中存在错误。报告为RSP-21438

每次打开弹出窗口时,

TPopup内部创建新的TCustomPopupForm。但是,该窗体不会在弹出窗口关闭时释放(应该如此),而只有在弹出控件本身被破坏时才会释放。

解决方法很少

1。在打开时创建新的TPopup控件,并在关闭时将其释放

2。修复FMX.ControlsFMX.Forms

可以在上述单元的实现部分中修复错误。这意味着您可以将FMX.ControlsFMX.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;
....