Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.008 c
14-29549
sad
2004-01-21 08:17
2004.02.10
Lazarus.Win32..Компонент для работы с Interbase Firebird.


3-29236
Элина
2004-01-19 14:45
2004.02.10
Изменение параметоров BDE программно


1-29316
ncua
2004-01-29 22:56
2004.02.10
Как изменять размеры контролов разтягивая мышой в runtime


3-29197
Тимохов
2004-01-20 11:17
2004.02.10
Про TClientDataSet.


1-29398
Islander
2004-02-01 02:05
2004.02.10
Как проверить, показывается ли у приложения кнопка на TaskBar?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский