Главная страница
    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.46 MB
Время: 0.01 c
1-38211
diks
2003-02-04 16:15
2003.02.13
Пароль


14-38506
gn
2003-01-27 16:52
2003.02.13
раз уш навсех наезжают


1-38223
Dr.Karter
2003-02-05 09:00
2003.02.13
Как получить значение ключа?


14-38497
Слабый и обиженный
2003-01-27 16:28
2003.02.13
И на меня наехали...


4-38626
SaperXL
2002-12-31 04:27
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский