![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Где ошибка? [D6, WinME, Win2k]
Dennis S © (2003-02-05 11:11:00)Выдает ошибку после того, как убивает Объект...
================================================
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;
Sha (2003-02-05 15:03:00) [1]> 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;
Skier (2003-02-05 14:44:00) [2]>Dennis S © (05.02.03 14:40)
> Имя объекта, чтобы обрабатывать объект через меню
Может лучше Tag использовать ?
Dennis S (2003-02-05 14:40:00) [3]Вопрос всем:
А как определять Имя объекта, чтобы обрабатывать объект через меню, используя его имя (так как при использовании меню, Sender кнопки теряется и новый Sender берется от меню)???
Dennis S (2003-02-05 14:04:00) [4]2 Юрий Федоров
Пасибо, работает...
2 Sha
А код написать можешь - интересно, все-таки...
Вопрос всем:
А как определять Имя объекта, чтобы обрабатывать объект через меню, используя его имя (так как при использовании меню, Sender кнопки теряется и новый Sender берется от меню)???
Sha (2003-02-05 12:42:00) [5]> Dennis S © (05.02.03 12:02)
> А если Sender должен первый раз разрушить - что для него будет запомненное ранее? ;)
Думаю, nil. Только его разрушать не стоит :)
Плюс моего предложения состоит в том, что не требуются дополнительные обработчики, нужна только одна внешняя переменная.
Юрий Федоров (2003-02-05 12:32:00) [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;
Dennis S (2003-02-05 12:22:00) [7]2 Юрий Федоров
Как правильно послать сообщение (PostMessage)???
...к моему случаю...
Dennis S (2003-02-05 12:02:00) [8]2 neg2001
тоже самое (выдает ошибку)
2 Юрий Федоров
Как правильно послать сообщение (PostMessage)???
...к моему случаю...
2 Sha
Это ты уж закрутил...запоминать текущий, разрушать запомненный ранее... А если Sender должен первый раз разрушить - что для него будет запомненное ранее? ;)
Sha (2003-02-05 11:28:00) [9]Юрий Федоров © (05.02.03 11:19) прав.
Еще вариант: делать Visible:=false;
И все-таки, если надо разрушить Sender, то при каждом
OnClick разрушать Sender, запомненный ранее, а текущий Sender запоминать.
neg2001 (2003-02-05 11:20:00) [10]Попробуй так:
procedure TForm1.ClickON(Sender: TObject);
begin
FreeAndNil(Sender);
end;
Юрий Федоров (2003-02-05 11:19:00) [11]Так разрушать не следует. Лучше отправить сообщение (PostMessage)
на Handle формы, по которому разрушить кнопку