0

この質問を読んだ後、エンドユーザーが実行時にアプリケーションのスタイルを変更できるようにしました。これにより、次のような内容のメモリ リークの非常に長いリストが作成されました。

A memory block has been leaked. The size is: 12

This block was allocated by thread 0x130C, and the stack trace (return addresses) at
the time was: 404B3E [frxDsgnIntf.pas][System][@GetMem$qqri][1993] 454B77
[System.SysUtils][Sysutils.WideStrAlloc$qqrui] 454BB2 [System.SysUtils]
Sysutils.StrNew$qqrpxb] 53046E [Vcl.Controls][Controls.TWinControl.DestroyWnd$qqrv]
57E1C7 [Vcl.ComCtrls][Comctrls.TCustomTreeView.DestroyWnd$qqrv] A53DEE [JvComCtrls]
TJvTreeView.DestroyWnd$qqrv] 530733 [Vcl.Controls]
Controls.TWinControl.DestroyHandle$qqrv] 530703 [Vcl.Controls]
Controls.TWinControl.DestroyHandle$qqrv] 530703 [Vcl.Controls]
Controls.TWinControl.DestroyHandle$qqrv] 7552FEB6 [EnumThreadWindows] 530703
[Vcl.Controls][Controls.TWinControl.DestroyHandle$qqrv]

The block is currently used for an object of class: Unknown

frxDsgnIntf.pasユーザーがスタイルを変更できるようにするフォーム上のすべてのコンポーネントを除いて、ほとんどすべてのリークは にあり、すべてがこの手順を指しています。

with TdlgSettings.Create(nil) do // leak here according to FastMM report
  try
    if ShowModal = mrOk then;
  finally
    Release;
  end;

私が何か間違ったことをしているのか、それともスタイルを変更するときにこれが予想される動作なのか、誰かが知っていますか? TStyleManager実行時にスタイルを変更するコードは次のとおりです。

procedure TdlgSettings.cbThemeChange(Sender: TObject);
begin
  TStyleManager.TrySetStyle(cbTheme.Text); // cbTheme.Items lists all the themes which are included the application
end;
4

1 に答える 1

0
uses
Vcl.Styles, Vcl.Themes,
uFixMemOverflowVclStyle; 

リンク: http://www.delphi4arab.net/forum/showthread.php?t=9607

于 2014-04-08T07:09:32.283 に答える