Удалить компонент кликнув на него
Модератор: Модераторы
Удалить компонент кликнув на него
Доброго времени суток!
Собственно сабж.
Такое возможно?
Если да, то как?
Если нет, то почему (хотя бы вкратце)?
Собственно сабж.
Такое возможно?
Если да, то как?
Если нет, то почему (хотя бы вкратце)?
На OnClick компонента пишем component.free и все. 
carrots писал(а):На OnClick компонента пишем component.free и все.
Да брось ты. Пробывал еще до создания этого сабжа. Получаем access violtaton.
Код: Выделить всё
procedure TForm1.Button1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
button1.Destroy;
end; ViTality писал(а):Код: Выделить всё
procedure TForm1.Button1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
button1.Destroy;
end;
пробывал я и это.
кинем на форму button2 и в onclick допишем :
var b : tbutton;
begin
b := tbutton.create;
b := 'button1';
b.parent := form1;
end;
и получаем ошибку, что button1 уже сущестует. Так что .destroy не срабатывает
destroy напрямую вообще вызывать не рекомендуется
Идея в том чтобы не делать Free в OnClick
1. повесить таймер.Enabled:=True на Click. по OnTimer - Free кнопки
2. ловить сообщения у окна LM_LBUTTONDOWN для хендла кнопки и там Free кнопки. (ммм... но не уверен)
1. повесить таймер.Enabled:=True на Click. по OnTimer - Free кнопки
2. ловить сообщения у окна LM_LBUTTONDOWN для хендла кнопки и там Free кнопки. (ммм... но не уверен)
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
begin
button1.Free;
end;
procedure TForm1.Button2Click(Sender: TObject);
var b : tbutton;
begin
b := tbutton.Create(self);
b.Name := 'button1';
b.parent := form1;
end; прекрасно отрабатывает. никаких ошибок не выплевывает
да я в линухе проверял. так может быть это баг виндовой версии? или так и должно быть? к примеру в дельфи как этот код отрабатывает?
Добавлено спустя 22 минуты 57 секунд:
следующее работает в винде
Добавлено спустя 22 минуты 57 секунд:
следующее работает в винде
Код: Выделить всё
procedure TForm1.Button1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
button1.Free;
end;
procedure TForm1.Button2Click(Sender: TObject);
var b : tbutton;
begin
b := tbutton.Create(self);
b.Name := 'button1';
b.parent := form1;
end;