Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.02.13;
Скачать: CL | DM;

Вниз

Где ошибка?   Найти похожие ветки 

 
Dennis S ©   (2003-02-05 11:11) [0]

Выдает ошибку после того, как убивает Объект...
================================================

procedure TForm1.Image1Click(Sender: TObject);
var
New : TButton;
begin
New := TButton.Create(Form1);
N := N + 1;
New.Name := "B"+ IntToStr(N);
New.Top := RANDOM(100);
New.Left := RANDOM(100);
New.Parent := Form1;
New.OnClick := Form1.ClickON;
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
N := 0;
end;

procedure TForm1.ClickON(Sender: TObject);
begin
//TControl(Sender).Destroy;
// или
TControl(Sender).Free;

end;


 
Юрий Федоров ©   (2003-02-05 11:19) [1]

Так разрушать не следует. Лучше отправить сообщение (PostMessage)
на Handle формы, по которому разрушить кнопку


 
neg2001   (2003-02-05 11:20) [2]

Попробуй так:

procedure TForm1.ClickON(Sender: TObject);
begin
FreeAndNil(Sender);
end;


 
Sha ©   (2003-02-05 11:28) [3]

Юрий Федоров © (05.02.03 11:19) прав.
Еще вариант: делать Visible:=false;
И все-таки, если надо разрушить Sender, то при каждом
OnClick разрушать Sender, запомненный ранее, а текущий Sender запоминать.


 
Dennis S ©   (2003-02-05 12:02) [4]

2 neg2001
тоже самое (выдает ошибку)

2 Юрий Федоров
Как правильно послать сообщение (PostMessage)???
...к моему случаю...

2 Sha
Это ты уж закрутил...запоминать текущий, разрушать запомненный ранее... А если Sender должен первый раз разрушить - что для него будет запомненное ранее? ;)


 
Dennis S ©   (2003-02-05 12:22) [5]

2 Юрий Федоров
Как правильно послать сообщение (PostMessage)???
...к моему случаю...


 
Юрий Федоров ©   (2003-02-05 12:32) [6]


const WM_BUTTON_MUST_DIE = WM_USER + 1;
type
TForm1 = class(TForm)
...
private
procedure ButtonMustDie(var M : TMessage); message WM_BUTTON_MUST_DIE;
...
procedure TForm1.ClickON(Sender: TObject);
begin
PostMessage(Handle, WM_BUTTON_MUST_DIE, 0, LParam(Sender));
end;

procedure TForm1.ButtonMustDie(var M : TMessage);
begin
TObject(M.LParam).Free;
end;


 
Sha ©   (2003-02-05 12:42) [7]

> Dennis S © (05.02.03 12:02)
> А если Sender должен первый раз разрушить - что для него будет запомненное ранее? ;)

Думаю, nil. Только его разрушать не стоит :)
Плюс моего предложения состоит в том, что не требуются дополнительные обработчики, нужна только одна внешняя переменная.




 
Dennis S ©   (2003-02-05 14:04) [8]

2 Юрий Федоров
Пасибо, работает...

2 Sha
А код написать можешь - интересно, все-таки...

Вопрос всем:
А как определять Имя объекта, чтобы обрабатывать объект через меню, используя его имя (так как при использовании меню, Sender кнопки теряется и новый Sender берется от меню)???


 
Dennis S ©   (2003-02-05 14:40) [9]

Вопрос всем:
А как определять Имя объекта, чтобы обрабатывать объект через меню, используя его имя (так как при использовании меню, Sender кнопки теряется и новый Sender берется от меню)???


 
Skier ©   (2003-02-05 14:44) [10]

>Dennis S © (05.02.03 14:40)

> Имя объекта, чтобы обрабатывать объект через меню

Может лучше Tag использовать ?


 
Sha ©   (2003-02-05 15:03) [11]

> Dennis S © (05.02.03 14:04)
> А код написать можешь - интересно, все-таки...

А что тут писать:

var
SaveObj: TObject= nil;
procedure TForm1.ClickON(Sender: TObject);
begin;
if SaveObj<>nil then begin;
SaveObj.Free; SaveObj:=nil;
end;
if NeedSenderToDestroy then begin;
SaveObj:=Sender; TControl(SaveObj).Visible:=false;
end;
end;




Страницы: 1 вся ветка

Текущий архив: 2003.02.13;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.023 c
1-38204
SeNtiMeL
2003-02-02 01:45
2003.02.13
позиция текста в RichEdit !


3-38080
nik4543
2003-01-27 13:44
2003.02.13
Excel


1-38383
Diod
2003-02-02 07:33
2003.02.13
Фйлы и edit


14-38448
Мазут Береговой
2003-01-30 02:17
2003.02.13
Господа! Кто и когда из вас зубы чистит?


14-38554
Stager
2003-01-27 20:58
2003.02.13
Какие стихи пишут программисты?