Форум: "Основная";
Текущий архив: 2003.02.13;
Скачать: [xml.tar.bz2];
ВнизГде ошибка? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c