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