Удалить компонент кликнув на него

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Удалить компонент кликнув на него

Сообщение minoshi » 18.10.2009 23:20:22

Доброго времени суток!

Собственно сабж.
Такое возможно?

Если да, то как?
Если нет, то почему (хотя бы вкратце)?
Аватара пользователя
minoshi
постоялец
 
Сообщения: 279
Зарегистрирован: 17.05.2008 21:23:38

Re: Удалить компонент кликнув на него

Сообщение carrots » 19.10.2009 02:36:59

На OnClick компонента пишем component.free и все. :)
Аватара пользователя
carrots
постоялец
 
Сообщения: 138
Зарегистрирован: 28.03.2008 02:13:02

Re: Удалить компонент кликнув на него

Сообщение minoshi » 19.10.2009 09:06:13

carrots писал(а):На OnClick компонента пишем component.free и все. :)


Да брось ты. Пробывал еще до создания этого сабжа. Получаем access violtaton.
Аватара пользователя
minoshi
постоялец
 
Сообщения: 279
Зарегистрирован: 17.05.2008 21:23:38

Re: Удалить компонент кликнув на него

Сообщение ViTality » 19.10.2009 09:26:37

Код: Выделить всё
procedure TForm1.Button1MouseUp(Sender: TObject; Button: TMouseButton;  Shift: TShiftState; X, Y: Integer);
begin
  button1.Destroy;
end; 
ViTality
постоялец
 
Сообщения: 308
Зарегистрирован: 05.10.2007 15:12:02

Re: Удалить компонент кликнув на него

Сообщение minoshi » 19.10.2009 11:41:30

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 не срабатывает
Аватара пользователя
minoshi
постоялец
 
Сообщения: 279
Зарегистрирован: 17.05.2008 21:23:38

Re: Удалить компонент кликнув на него

Сообщение v-t-l » 19.10.2009 12:15:12

destroy напрямую вообще вызывать не рекомендуется
v-t-l
энтузиаст
 
Сообщения: 735
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: Удалить компонент кликнув на него

Сообщение Inferno » 19.10.2009 14:16:39

Идея в том чтобы не делать Free в OnClick
1. повесить таймер.Enabled:=True на Click. по OnTimer - Free кнопки
2. ловить сообщения у окна LM_LBUTTONDOWN для хендла кнопки и там Free кнопки. (ммм... но не уверен)
Аватара пользователя
Inferno
новенький
 
Сообщения: 78
Зарегистрирован: 20.03.2009 14:40:20
Откуда: Тюмень

Re: Удалить компонент кликнув на него

Сообщение ViTality » 19.10.2009 16:34:01

Код: Выделить всё
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;   

прекрасно отрабатывает. никаких ошибок не выплевывает
ViTality
постоялец
 
Сообщения: 308
Зарегистрирован: 05.10.2007 15:12:02

Re: Удалить компонент кликнув на него

Сообщение alexs » 19.10.2009 19:07:50

ViTality
Сам на эти грабли наступил недавно.
В линухе всё прекрасно работает. В винде - ошибка. Был неприятно удивлён - пришлось писать костыль.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Удалить компонент кликнув на него

Сообщение ViTality » 19.10.2009 21:42:11

да я в линухе проверял. так может быть это баг виндовой версии? или так и должно быть? к примеру в дельфи как этот код отрабатывает?

Добавлено спустя 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;
ViTality
постоялец
 
Сообщения: 308
Зарегистрирован: 05.10.2007 15:12:02


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17

Рейтинг@Mail.ru