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

Вниз

Ограничение на количество компонентов дочерней формы?   Найти похожие ветки 

 
alex-ran   (2003-09-24 11:12) [0]

Ув. мастера, возникла следующая проблема: при попытке закрыть окно главной формы вылетает сообщение об ошибке:
Exception EAccessViolation in module XXX.exe at 0003BAAA...
Сообщение об ошибке возникает только когда добавляю на дочернюю форму больше 12 DBEdit-ов. Если я в OnClose главной формы закрываю все дочерние то все ОК.
Не подскажите в чем тут дело?


 
Skier ©   (2003-09-24 11:15) [1]


> Не подскажите в чем тут дело?

Ошибка в программе.


 
alex-ran   (2003-09-24 11:39) [2]

Которой пока нет?
Просто на форму накидал DBEdit-ов и компоненты для связи с БД.
Из программы :)в дочерней формы присутствует только:

procedure TfmFinCred.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caFree;
end;

Да, еще стращный кусок кода в главной форме:
procedure TfmMain.smnFinCredClick(Sender: TObject);
begin
with TfmFinCred.Create (Self) do
begin
Left:=0;
Top:=0;
Height:=500;
Width:=680;
end;
end;
И где тут ошибка?


 
Е-Моё имя ©   (2003-09-24 11:44) [3]


> module XXX.exe

ишь!


 
Юрий Зотов ©   (2003-09-24 13:25) [4]

> alex-ran (24.09.03 11:39) [2]

Можно предположить, что дело в том, что делается от в чем.

1. Action:=caFree;
То есть, дочерняя форма при своем закрытии будет уничтожаться.

2. with TfmFinCred.Create (Self) do ...
То есть, главная форма становится владельцем дочерней и поэтому при закрытии главной формы будет сделана попытка уничтожения дочерней формы.

Получается уничтожение уже уничтоженной дочерней формы. Попробуйте заменить ее владельца на Application:
with TfmFinCred.Create(Application) do ...


 
Владислав ©   (2003-09-24 13:34) [5]

> Юрий Зотов © (24.09.03 13:25) [4]

"Получается уничтожение уже уничтоженной дочерней формы"

А какже TComponent.Notificaton?


 
Юрий Зотов ©   (2003-09-24 14:07) [6]

> Владислав © (24.09.03 13:34) [5]

А разве в коде TCustomForm.Notification есть очистка каких-либо ссылок на дочерние формы?

Ее там нет. Значит, главная форма вместе с собой просто уничтожит все свои дочерние формы, ничего не обнуляя. А затем (ведь стоит Action = caFree) будут вызваны Release, CMRelease и Free для дочерней формы.

Впрочем, для полной ясности это надо просто пройти дебаггером.


 
alex-ran   (2003-09-24 15:10) [7]

Ув. мастера. После экспериментов обнаружилось следующее:
1. При уничтожении на дочерней форме MainMenu проблема исчезла.
2. При последующем создании Меню вновь возникла.
3. При перемещении описания Меню в dfm-файле вперед, сразу после описания свойств формы, проблема вновь исчезла.
4. При добавлении любого пункта в Меню проблема появляется из-за того что описание Меню в dfm-файле прыгает к середине файла, при возврате вперед снова все ОК.
Получается что все дело в порядке следования объектов в дочернем окне?!
Повторяю, на дочернюю форму просто накидана куча компонентов с которыми вообще не связано ни куска кода.

> Юрий Зотов ©


 
alex-ran   (2003-09-24 15:17) [8]


> > Юрий Зотов ©

Мне кажется что если бы дело было в том что Вы предполагаете, то ошибка возникала бы даже при уничтожении пустой дочерней формы и проявлялась бы всегда независимо от количества компонентов и их порядка следования.
Может я и ошибаюсь. Не знаю


 
Переяслов Григорий ©   (2003-09-24 18:26) [9]

IMHO, где-то портишь память. Ты или используемые тобой компоненты. У меня был случай, когда удаляешь пункт меню - работает, добавляешь - не работает. Выяснилось, что при инициализации стороннего компонента не инициализировалась одна ооочень большая запись и ссылки в ней шли на тот свет. Поэтому и не работало ;-).



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

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

Наверх




Память: 0.49 MB
Время: 0.024 c
6-18528
isya
2003-08-05 12:03
2003.10.06
Ferewall


3-18263
KIR
2003-09-15 17:06
2003.10.06
Строка соединения с IB


1-18323
anonymous
2003-09-23 17:08
2003.10.06
эксепшены в D7


4-18668
Pindos
2003-08-01 02:36
2003.10.06
Handle Активного Окна


7-18647
Dmitriy
2003-07-22 00:43
2003.10.06
---|Ветка была без названия|---