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


Автор: Zero 31.10.2004, 12:51
Народ у меня есть такой вопрос???
Почему когда я динамически создал ряд кнопок, и после пытаюсь удалить эти кнопки, то при удалении некотрых бывает, что просто выдаётся ошибка и прога закрывается.
Причём я заметил, что именно если первые 2 кнопки стояющие слева на форме если их сразу удалить то возникает, глюк, а если перед этим др. кнопки удалить, а потм эти то вроде всё нормально.

да кстати у меня ещё сделано открытие доступа удаления этих кнопок на Button2...

Не подскажете почему происходят глюки, и возможный способ решения против этого. :(
Код

uses buttons,stdctrls,...
...
type
 TForm1 = class(TForm)
    ...
    procedure buttonclick(sender: tobject);
    ...
var
 Form1: TForm1;
 udalenie:boolean;
 i:integer;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 with tspeedbutton.Create(parent) do
   begin
     parent:=form1;
     onclick:=buttonclick;
     left:=i;
     i:=i+25;
   end;
end;

procedure tform1.buttonclick(sender: tobject);
begin
 if udalenie then
   begin
     (sender as tspeedbutton).Free;
     i:=i-25;
   end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 if button2.Caption='Режим удаления открыт' then
   begin
     button2.Caption:='Режим удаления закрыт';
     udalenie:=false;
   end
 else
   begin
     button2.Caption:='Режим удаления открыт';
     udalenie:=true;
   end;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
 i:=1; udalenie:=false;
end;

Автор: p0s0l 31.10.2004, 19:00
Попробуй как-нибудь типа такого:
Код
uses buttons,stdctrls,...
...
const
 WM_DELBTN = WM_USER + 1234;

type
 TForm1 = class(TForm)
    ...
    procedure buttonclick(sender: tobject);
    procedure DelButton (var msg : TMessage); message WM_DELBTN;
    ...
var
 Form1: TForm1;
 udalenie:boolean;
 i:integer;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 with tspeedbutton.Create(parent) do
   begin
     parent:=form1;
     onclick:=buttonclick;
     left:=i;
     i:=i+25;
   end;
end;

procedure tform1.buttonclick(sender: tobject);
begin
 if udalenie then
 begin
   PostMessage (Handle, WM_DELBTN, WPARAM(Sender), 0);
   i:=i-25;
 end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 if button2.Caption='Режим удаления открыт' then
   begin
     button2.Caption:='Режим удаления закрыт';
     udalenie:=false;
   end
 else
   begin
     button2.Caption:='Режим удаления открыт';
     udalenie:=true;
   end;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
 i:=1; udalenie:=false;
end;

procedure TForm1.DelButton;
begin
 TSpeedButton(msg.WParam).Free;
end;

Т.к. в обработчике события кнопки нельзя освобождать её же саму...
Поэтому удаляем кнопку после выхода из функции (с помощью нашего сообщения WM_DELBTN).


Автор: Zero 31.10.2004, 19:40
Спасибо!!! Как всегда, теперь работает... :cool

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