delphi - Refer to an object instance and free it -
if create multiple tbutton objects routine:
procedure createbutton; begin btn := tbutton.create(nil); end; then, how can refer specific object instance free using method like:
procedure freebutton; begin btn[0].free; //??? end; of course, not compile, think question clear: how declare btn? , how free multiple instances?
it doesn't make sense create tbutton anywhere isn't part of form (which code does).
with being said, in order refer later free it, need store reference somewhere.
since you're referring "multiple buttons" , using array code in delete routine, think you're wanting track array of buttons. here's example of doing that:
type tform1 = class(tform) procedure formcreate(sender: tobject); // add via object inspector events tab private { private declarations } // add these btnarray: array of tbutton; procedure createbuttons(const numbtns: integer); procedure deletebtn(btntodel: tbutton); procedure btnclicked(sender: tobject); public { public declarations } end; var form1: tform1; implementation {$r *.dfm} procedure tform1.deletebtn(btntodel: tbutton); var i: integer; begin // check each button in array see if it's btntodel. if so, // remove , set array entry nil can't deleted // again. := low(btnarray) high(btnarray) begin if btnarray[i] = btntodel begin freeandnil(btnarray[i]); break; end; end; end; procedure tform1.formcreate(sender: tobject); begin // create 10 buttons on form createbuttons(10); end; // called when each button clicked. assigned in createbuttons() below procedure tform1.btnclicked(sender: tobject); begin // delete button clicked if (sender tbutton) deletebtn(tbutton(sender)); end; procedure tform1.createbuttons(const numbtns: integer); var i: integer; begin // allocate storage indicated number of buttons setlength(btnarray, numbtns); // each available array item := low(btnarray) high(btnarray) begin btnarray[i] := tbutton.create(nil); // create button btnarray[i].parent := self; // tell display btnarray[i].top := * (btnarray[i].height + 2); // set top edge show btnarray[i].name := format('btnarray%d', [i]); // give name (not needed) btnarray[i].caption := format('btn %d', [i]); // set caption btnarray[i].onclick := btnclicked; // assign onclick event end; end; if put code in new blank vcl forms application , run it, you'll see 10 buttons ('btn 0throughbtn 9`) on form. clicking on button remove form (and array).
Comments
Post a Comment