Probé un script desde un sitio web Ejecuto http://www.delphi-central.com/runtime.aspx y lo logré.¿Por qué se bloquea mi programa cuando destruyo un botón en su propio controlador OnClick?
private
{ Private declarations }
procedure CustomButtonClick(Sender: TObject);
procedure TForm1.AddNewButtonClick(Sender: TObject);
var
NewButton : TButton;
begin
NewButton := TButton.create(self);
with NewButton do
begin
Top := 30;
Width := 60;
Left := Width * (self.ControlCount-2);
Parent := self;
OnClick := CustomButtonClick;
Caption := 'Button '+ inttostr (self.ControlCount-2);
end; //With
end;
procedure TForm1.DeleteLastButtonClick(Sender: TObject);
begin
if Self.ControlCount>2 then
TButton (Controls[ControlCount-1]).destroy;
end;
procedure TForm1.CustomButtonClick(Sender: TObject);
begin
ShowMessage(TButton(Sender).caption + ' Pressed');
end;
Pero si cambio el OnClick,
OnClick := CustomButtonClick; ==> OnClick := DeleteLastButtonClick;
se generará un mensaje de error. ¿Cómo pudo suceder esto ... ???
Si quieres destruir un edificio, ¿lo harás ** dentro ** o ** afuera **? – Alex
Tener su primera pregunta downvoted puede ser muy desalentador. ¿Es esta pregunta realmente "poco clara o no útil"? – mjn
@josef: la respuesta de Mason es correcta; puedes ver TForm (en Forms.pas) cómo hace cosas similares; busque los procedimientos Release y CMRelease, y la constante CM_Release. –