Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Отчего Exception? [D6, WinXP]


georgius ©   (2006-06-20 17:08:00) 

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


georgius   (2006-06-21 14:53:00) [1]

2 Cashmare:
Ты все правильно говоришь, для деревьев использую Begin/EndUpdate, для grids - Enable/DisableControls. DoubleBuffered включаю у всего, что только можно, даже с WM_SETREDRAW поигрался, и все-равно только LockWindowUpdate по-настоящему убирает все мерцание.
А окношо - большое, отображается штук 8-мь таблиц в DBgrid и DBTree, так что мерцание обязательнонужно лечить. Минус у применения LockWindowUpdate в том. что он не сочетается со  SplashWindow из RX


Cashmare   (2006-06-21 00:28:00) [2]

georgius ©   (20.06.06 20:42) [12]
1) заморозить изображение, чтобы ничего не мерцало


DoubleBuffered или BeginUpdate...EndUpdate. Окно - понятие растяжимое, смотря какое у тебя окно.


georgius   (2006-06-20 20:42:00) [3]

Камрады, спасибо за советы, меня подвело сочетание SplashWindow и LockWindowUpdate. Может подскажете что-нибудь дельное, как на время обширных изменений в окне: 1) заморозить изображение, чтобы ничего не мерцало и 2) показать какое-нибудь окошко, типа "ждите".


georgius   (2006-06-20 19:15:00) [4]

2 Ega23: точно, наелся я в свое время с этими Parent-ами.
Но в этом случае, похоже, мне подложил собаку SplashWindow из RX. Закомментарил все вызовы - работает без сбоев. Только Splash все-равно какой-то нужен, а то процессы переключения режимов могут занимать 2-3 секунды при большой базе.


Ega23   (2006-06-20 19:11:00) [5]

Рекомендую обратить внимание на SetParent у фреймов.


Плохиш   (2006-06-20 19:10:00) [6]


> Обидно, что код не мой, это все системные вызовы.

Ну да, опять Билл Геитс виноват? Поищи бревно в глазу своём, то бишь коде. Все эти ошибки являются следствием твоих ошибок в программе.

> На главном окне мильён компонентов (из нескольких Frame-
> ов), куча графики и т.п.

Вот тут-то ты и пытаешься что-то использовать после уничтожения.


georgius   (2006-06-20 19:01:00) [7]

Похоже, проблема не в окошке. На главном окне мильён компонентов (из нескольких Frame-ов), куча графики и т.п.
Ошибка возникает в коде TComponent.RemoveNotification - видимо где-то что-то не вовремя освобождается. Обидно, что код не мой, это все системные вызовы.


Плохиш   (2006-06-20 18:47:00) [8]


> Ega23 ©   (20.06.06 18:44) [6]

На чём гадаешь? На кофейной гуще или на пивной пене? ;-)


Ega23   (2006-06-20 18:44:00) [9]

AV означает, что ты обращаешься к ещё не созданному объекту или уже убитому.
Самый интересный вариант, когда объект "наполовину" создан...  :о) Или убит.


Kotyara   (2006-06-20 18:33:00) [10]

У меня такое было, когда в MDI приложении на child форме расположен "косой десяток" компонентов, сбрасывающих свое состояние на диск во время закрытия. Если закрыть такое приложение с открытым дочерним окном, выскакавало исключение. Походе, главная форма успевала "прикрыть" дочернюю форму раньше, чем она нормально закрывалась. Переместил код закрытия дочерней формы из OnClose в OnCloseQuery - ошибка пропала.


Cashmare   (2006-06-20 17:48:00) [11]

При выходе из программы пытаешься закрыть уже закрытое?


Германн   (2006-06-20 17:44:00) [12]

Какие компоненты на этой форме?


Ega23   (2006-06-20 17:20:00) [13]

Как создаёшь, как удаляешь?


Плохиш   (2006-06-20 17:14:00) [14]

Ошибка в 17й строке


Наверх

Титульная страница Поиск, карта сайта Написать письмо