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