Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.10;
Скачать: CL | DM;

Вниз

ошибка при закрытии   Найти похожие ветки 

 
Grinder ©   (2004-01-26 21:00) [0]

Ребята. Подскажите где ошибка.
Есть окно THintWindow и переменная с этим типом Hint.
Есть форма Form3, у которой parent этот hint.
По нажатии на кнопку на главной форме происходит следующее.

procedure TForm1.Button2Click(Sender: TObject);
begin
Application.CreateForm(TForm3, Form3);
unit2.hint:=TIconHintX.Create(self);
form3.Left:=0;
Form3.Top:=0;
form3.Parent:=unit2.hint;
Form3.Show;
unit2.hint.ActivateHint(Rect(10,100,110,200),"");
end;

Обработчик закрытия Form3 следующий

procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);
begin
unit2.hint.ReleaseHandle;
unit2.hint.Free;
unit2.hint:=nil;
Action:=caFree;
form3:=nil;
end;

При закрытии происходит ошибка

Project Project1.exe raised exception class EAccessViolation with message "Access violation at address 00000000. Read of address
00000000". Process stopped. Use Step or Run to continue.

В чем тут проблема?

P.S.

TIconHintX = class(THintWindow)

файл проекта

begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);

// Application.CreateForm(TForm3, Form3);
Application.Run;
end.


 
Митяй2   (2004-01-26 21:03) [1]

Смотри по BreakPoint"у...


 
Grinder ©   (2004-01-26 22:49) [2]

Смотрел.

Ошибка возникает сразу после end; в коде
procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);
begin
unit2.hint.ReleaseHandle;
unit2.hint.Free;
unit2.hint:=nil;
Action:=caFree;
form3:=nil;
end;

Причем не после form3:=nil;, а после end; Если после form3:=nil; вставить скажем beep;, то нормально работает и опять после end; ошибка. Но как это понять не знаю.


 
Grinder ©   (2004-01-27 22:17) [3]

Народ. Няужо никто не поможет?


 
Islander   (2004-01-27 22:20) [4]

form3:=nil; - ТЫ ХОТЬ ПОНИМАЕШЬ, ЧТО ТЫ ПИШЕШЬ?! ХОЧЕШЬ УКАЗАТЕЛЬ НА ФОРМУ ДО ЕЕ УНИЧТОЖЕНИЯ НАПРАВИТЬ В НЕКУДА?!


 
Юрий Федоров ©   (2004-01-27 22:47) [5]

>>Islander (27.01.04 22:20) [4]

Ну и что? Указатель снаружи, форме, чтобы разрушиться, внешний указатель не нужен

>>Grinder © (26.01.04 22:49) [2]

Ты уверен, что hint.ReleaseHandle нужно вызывать?
На вскидку, никакого криминала не видно.

В любом случае закомментируй весь FormClose, а потом открывай по одной строке и смотри, когда начнет падать.
Либо же ошибка вообще в другом месте. Может в классе TIconHintX что-то напортачено ?


 
Grinder ©   (2004-01-29 14:44) [6]

2IsLander

Почитай Marco Cantu. Там написано так делать правильно.


 
Grinder ©   (2004-01-29 14:46) [7]

2Юрий Федоров

Убрал hint.Free - работает. Но почему так? Не пойму. Т.е. вызывается только ReleaseHandle.



Страницы: 1 вся ветка

Текущий архив: 2004.02.10;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.012 c
1-29431
Anthony Fox
2004-01-31 10:06
2004.02.10
Вопрос насчет иконки в SystemTray и Explorer


1-29371
AntonSh
2004-01-29 10:52
2004.02.10
Работа со строками


14-29525
DiamondShark
2004-01-21 21:42
2004.02.10
Это круче пингвинов.


4-29664
sowell
2003-12-04 14:47
2004.02.10
ShellExecute и его выполнение


1-29443
sergg
2004-01-30 15:36
2004.02.10
Передача параметра в: const AFilter: string =