Главная страница
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.02 c
1-38277
oss
2003-02-05 17:21
2003.02.13
перехватить печать на принтер


14-38501
Marsello
2003-01-23 18:36
2003.02.13
Кто нибудь работал с InterBase Server???????????


3-38147
VinRaider
2003-01-27 01:35
2003.02.13
Указание пути к базе данных


1-38257
Vitus
2003-02-05 11:55
2003.02.13
Как определить, что компонент is DataControl?


14-38500
Timofey
2003-01-27 22:11
2003.02.13
Как можно сделать фон вокруг значков рабочего стола прозрачным?