Unknown memory leak form delphi xe8 -
i created simple application button on form tform1 used create form tform2. form2 contains toolbar 2 buttons @ each corner , label tabcontrol below it. keep getting memory leak below. im sure created , destroyed forms correctly.
program project1; uses system.startupcopy, fmx.forms, unit1 in 'unit1.pas' {form1}, unit2 in 'unit2.pas' {form2}; {$r *.res} begin reportmemoryleaksonshutdown := true; application.initialize; application.createform(tform1, form1); application.run; end.
here form1 creates form2
unit unit1; interface uses system.sysutils, system.types, system.uitypes, system.classes, system.variants, fmx.types, fmx.controls, fmx.forms, fmx.graphics, fmx.dialogs, fmx.controls.presentation, fmx.stdctrls, unit2; type tform1 = class(tform) button1: tbutton; procedure button1click(sender: tobject); private { private declarations } public { public declarations } end; var form1: tform1; implementation {$r *.fmx} procedure tform1.button1click(sender: tobject); begin hide; application.createform(tform2, form2); form2.show; form2.windowstate := twindowstate.wsmaximized; end; end.
form 2 toolbar , tabcontrol
unit unit2; interface uses system.sysutils, system.types, system.uitypes, system.classes, system.variants, fmx.types, fmx.controls, fmx.forms, fmx.graphics, fmx.dialogs, fmx.stdctrls, fmx.tabcontrol, fmx.controls.presentation; type tform2 = class(tform) toolbar1: ttoolbar; button1: tbutton; tabcontrol1: ttabcontrol; tabitem1: ttabitem; tabitem2: ttabitem; label1: tlabel; button2: tbutton; procedure formclose(sender: tobject; var action: tcloseaction); private { private declarations } public { public declarations } end; var form2: tform2; implementation {$r *.fmx} procedure tform2.formclose(sender: tobject; var action: tcloseaction); begin action := tcloseaction.cafree; // showmessage('form freed closing whole application') ; application.mainform.close; end; end.
as said in comments, can not reproduce memory leak reports code have shown. maybe chasing wrong goose, i'll take chance guesswork.
you never explained why treating form1
way are, got strange feeling may login form. if case follows:
project1.dpr
program project1; uses system.startupcopy, fmx.forms, unit1 in 'unit1.pas' {form1}, unit2 in 'unit2.pas' {form2}, system.uitypes; // modal result {$r *.res} begin reportmemoryleaksonshutdown := true; application.initialize; form1 := tform1.create(application); try if form1.showmodal <> system.uitypes.mrok exit; form1.free; end; application.createform(tform2, form2); application.run; end.
note form1
not created application.createform
. reason first form created application.createform
becomes main form of application , closing close application. instead let form2
, main ui is, become main form can free form1
not needed after login.
now need set modal result of login form (form1), example (but want make more secure):
procedure tform1.button1click(sender: tobject); begin if (edit1.text = 'user') , (edit2.text = 'pass') modalresult := system.uitypes.mrok; end;
let me know if not @ looking , i'll delete.
Comments
Post a Comment