Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Удаление кнопки после ее нажатия


Автор: DriveIS 19.5.2007, 07:08
Как удалить кнопку с формы после нажатия на нее же? 
Если просто писать Free в обработчике события OnClick вылетает ошибка, хотя кнопка удаляется. Такая ошибка происходит не всегда, закономерности ее появления пока не нашел. 
Может кто-то сталкивался с такой проблемкой.

Автор: Sansa 19.5.2007, 08:01
Код

procedure Form1.Button1OnClick(Sender: TObject);
begin
  if Sender is TButton then
    TButton(Sender).Visible:= False;
end;

Автор: DriveIS 19.5.2007, 08:13
Нет... Такой вариант был у меня, но это не решение.
Кнопку требуется именно удалить. Думал, что дело в фокусе, который на кнопке при ее нажатии, но после Visible:=false и free ошибка все так же появлялась.

Автор: Sansa 19.5.2007, 08:26
Создаешь кнопку в рантайме или при разработке?

Автор: MetalFan 19.5.2007, 11:07
Код

может так?
procedure Form1.Button1OnClick(Sender: TObject);
begin
  PostMessage( TButton(Sender).Handle, WM_CLOSE, 0, 0);
end;

Автор: MetalFan 19.5.2007, 11:33
еще вариант:
Код

const
  WM_DESTROYOBJ = WM_APP + 1;

type
  TForm1 = class(TForm )
    btn1: TButton;
    procedure btn1Click(Sender: TObject);
    procedure WMDestroyObj( var AMessage: TMessage); message WM_DESTROYOBJ;
...
procedure TForm1.btn1Click(Sender: TObject);
begin
  PostMessage( Self.Handle, WM_DESTROYOBJ, Integer( Sender ), 0 );
end;

procedure TForm1.WMDestroyObj(var AMessage: TMessage);
begin
  TObject( AMessage.wParam ).Free;
end;


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)