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

Popular posts from this blog

c# - Operator '==' incompatible with operand types 'Guid' and 'Guid' using DynamicExpression.ParseLambda<T, bool> -