![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Отчего 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й строке