![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Создать и уничтожить
Bad_B © (2007-07-04 16:36:00)Создаю в разброс несколько кнопок так:
for i:=0 to 5 do
begin
New:=TButton.Create(form1);
New.Top:= random(350);
New.Left:=random(350);
New.Name:='but'+inttostr(i);
new.Caption:=New.Name;
New.OnClick:=OnClickButton;
New.Parent:=form1;
end;
В OnClickButton пишу такой код(ну что бы по клику кнопка уничтожалась)
Procedure TForm1.OnClickButton( Sender : TObject );
Begin
try
MessageDlg('Нажата кнопка ',mtInformation,[mbOk],0);
finally
tcontrol(sender).Free;
end;
End;
Не могу понять почему иногда работает а иногда нет. Что не так?
{RASkov} (2007-07-04 16:55:00) [1]> [0] Bad_B (04.07.07 16:36)
Удаляй так:
const WM_DELOBJ = WM_USER+1;
....
private
DelObj: TObject;
procedure MessDel(var Mes: TMessage); message WM_DELOBJ;
.....
procedure TForm1.MessDel;
begin
if Assigned(DelObj) then FreeAndNil(DelObj);
end;
Procedure TForm1.OnClickButton( Sender : TObject );
Begin
try
MessageDlg('Нажата кнопка ',mtInformation,[mbOk],0);
finally
DelObj:=Sender;
PostMessage(Handle, WM_DELOBJ, 0, 0);
end;
End;
Т.е. посылаем форме наше сообщение в котором и удаляется кнопка, но уже после отработки ее события ОнКлик...
ЗЫ И при создании нет необходимости в переменной New.....
Desdechado (2007-07-04 16:41:00) [2]Нельзя вызывать уничтожение объекта из его обработчика.