0
this question을 읽은 후 런타임에 최종 사용자가 내 응용 프로그램의 스타일을 변경하도록했습니다. 이것은 다음과 같은 내용으로 메모리 누수의 매우 긴 목록으로 이어질했습니다런타임시 VCL 스타일을 변경하면 메모리 누수가 발생합니다.
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;
'frx'은 스타일과는 아무 상관이없는, 그것은 FastReports의 나타내고,'DsgnIntf'은 단지 코드의 의미 IDE의 디자인 타임에 사용됩니다. IOW, 여기에 문제가 없습니다. –
@KenWhite 두 가지 포인트 : 1) frxDsgnIntf.pas가 내 응용 프로그램에 연결되어 있지 않으면 FastMM이 메모리 누수에 대해 불만을 표시하는 이유는 무엇입니까? 2) 누수 보고서가 끝나면 응용 프로그램 내에서 'TStyleManager.TrySetStyle (cbTheme.Text);'을 호출 할 때만 메모리 누수가 발생한다는 표시가 나타납니다. 'TStyleManager'가 현재 설정된 스타일을 바꿀 때 활성 폼이 적절하게 해제/재생성되지 않은 것처럼 보입니다. –