Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.47 MB
Время: 0.015 c
14-38487
Альберт
2003-01-15 02:44
2003.02.13
Нужны бета-тестеры


3-38011
Наташа
2003-01-24 20:08
2003.02.13
Ограничения на поля


4-38622
Антипыч
2002-12-26 14:28
2003.02.13
Значки на рабочем чтоле


1-38195
multik
2003-02-04 22:52
2003.02.13
Как в treeview узнать есть ли у него подузел


1-38198
pum5a
2003-02-03 18:19
2003.02.13
Как вызвать процедуру наследника





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский