Форум: "Основная";
Текущий архив: 2003.10.09;
Скачать: [xml.tar.bz2];
ВнизГлюки после закрытия программы Найти похожие ветки
← →
Mic_2000 (2003-09-26 10:05) [0]Подскажите, может у кого возникал такое тоже, программа щас работает нормально, но как только добавляю форму, после закрытия выскакивет сообщение "Access violation at adress 004E12A4 in module "Project1.exe"". В OnClose все нормально проходит, а гдето за ним выскакивает ошибка. Причем если опять удаляю форму все нормально, форму и переименовывать пробовал нече не помогает, при этом на этой форме еше нече не находится.
Программа вообще работает с базой Interbase 6
← →
ZEE (2003-09-26 10:26) [1]"но как только добавляю форму" - в дизайне или рантайм?..
что за форма - простая дельфовая или что-то похитрее?..
и ты уверен что это не Interbase чудит?..
← →
Nikolay M. (2003-09-26 10:30) [2]TRxFormStorage пользуешься?
← →
Mic_2000 (2003-09-26 10:40) [3]
> "но как только добавляю форму" - в дизайне или рантайм?..
Добавляю в дизайне, обычная форма, просто кнопочку New Form нажимаю, и все болше на ней нече не делаю.
> и ты уверен что это не Interbase чудит?..
Но ведь до добавления все нормально работает, да и на этой форме еше вообще нече нет, просто добавить еше форму хотел
> Nikolay M. © (26.09.03 10:30) [2]
> TRxFormStorage пользуешься?
RxLib компонентами пользуюсь но такого неиспользовал, восновном RxSpeedButton
← →
ZEE (2003-09-26 10:43) [4]может в project1.dpr с формами что-то накручено... если да - покажи...
← →
Alexander Vasjuk (2003-09-26 11:41) [5]У меня нечто похожее стало иметь быть после перехода на Д7.
Раньше TXXXForm.Create(nil);;;XXXForm.Free срабатывало
а теперь приходиться делать TXXXForm.Create(Application)
считаю это глюком Д7
← →
ZEE (2003-09-26 11:44) [6]> Alexander Vasjuk (26.09.03 11:41) [5]
> У меня нечто похожее стало иметь быть после перехода на
> Д7.
> Раньше TXXXForm.Create(nil);;;XXXForm.Free срабатывало
> а теперь приходиться делать TXXXForm.Create(Application)
> считаю это глюком Д7
а может TXXXForm.Create(nil) - считать глюком предыдущих версий?..
:)
← →
Alexander Vasjuk (2003-09-26 11:56) [7]ZEE © (26.09.03 11:44) [6]
А почему я могу создать Edit без владельца, а форму не могу?
Я ведь сам забочусь об освобождении.
← →
Nikolay M. (2003-09-26 12:10) [8]
> Alexander Vasjuk (26.09.03 11:41) [5]
Плюс рекомендованный способ уничтожать форму: Release, а не Free.
А насчет того, как лучше создавать формы - можно заглянуть в dpr-файл. То, что в борланде решили написать Application.CreateForm, а не как-то иначе - это о чем-нибудь говорит?
← →
Alexander Vasjuk (2003-09-26 12:23) [9]Nikolay M. © (26.09.03 12:10) [8]
Это говорит в том числе о том, что первая таким образом созданная форма будет главной. А что в таком случае делать с формой-логотипом, отображаемой перед главной?
И второе. Чем Release отличается от Free? (на самом деле не знаю, что такого делает Release)
← →
ZEE (2003-09-26 12:32) [10]> Alexander Vasjuk (26.09.03 12:23) [9]
> И второе. Чем Release отличается от Free? (на самом деле
> не знаю, что такого делает Release)
procedure TCustomForm.Release;
begin
PostMessage(Handle, CM_RELEASE, 0, 0);
end;
procedure TObject.Free;
begin
if Self <> nil then
Destroy;
end;
← →
Alexander Vasjuk (2003-09-26 12:35) [11]ZEE © (26.09.03 12:32) [10]
Хорошо, а с помощью сообщения освобождается что-нибудь еще, что не освобождается Destroy?
(я не спорю, но я должен знать преимущества, что бы отдать предпочтения)
← →
ZEE (2003-09-26 12:45) [12]просто PostMessage даст отработать другим событиям, а Destroy просто "убъет" форму (а если кто-то в момен "убийства" еще что-нить от формы захочет... :)
← →
Alexander Vasjuk (2003-09-26 12:51) [13]ZEE © (26.09.03 12:45) [12]
например что?
← →
Nikolay M. (2003-09-26 12:57) [14]Из хелпа:
Use Release to destroy the form and free its associated memory.
Release does not destroy the form until all event handlers of the form and event handlers of components on the form have finished executing. Release also guarantees that all messages in the form"s event queue are processed before the form is released. Any event handlers of the form should use Release instead of Free. Failing to do so could lead to an access violation.
Плюс замечание от ZEE, что Release не будет ждать непосредственного убиения формы, а даст отработать всем сообщениям в очереди, которые были посланы форме до момента убийства.
← →
ZEE (2003-09-26 12:59) [15]конкретно с формой не знаю, были случаи с компонентом - как раз после удаления возникали события ссылающиеся на него - и соотв. AV
← →
Alexander Vasjuk (2003-09-26 13:04) [16]Nikolay M. © (26.09.03 12:57) [14]
Тут написано что из обработчиков событий форма должна освобождаться Release а не Free. Тут же уже есть приплюсоованное замечание.
То есть это относится к обработчикам событий. Которые могут оказаться не последними.
А как насчет Логотипа, Николай?
← →
Nikolay M. (2003-09-26 13:42) [17]
> из обработчиков событий форма должна освобождаться Release
> а не Free
Именно так. Иначе с большой вероятностью будет AV.
> То есть это относится к обработчикам событий. Которые могут
> оказаться не последними.
>
> А как насчет Логотипа, Николай?
Я что-то пропустил? Никак не пойму эти 2 фразы...
← →
Alexander Vasjuk (2003-09-26 14:59) [18]Alexander Vasjuk (26.09.03 12:23) [9]
Nikolay M. © (26.09.03 12:10) [8]
Это говорит в том числе о том, что первая таким образом созданная форма будет главной. А что в таком случае делать с формой-логотипом, отображаемой перед главной?
← →
Nikolay M. (2003-09-26 15:08) [19]А, действительно пропустил...
1) Кто мешает логотипную форму сделать главной? Изврат, конечно, но per que бы собссно и nes pa?
2) В OnCreate/OnShow главной формы прописать Create, Show, Release логотипной формы - покажется, уничтожится.
> Это говорит в том числе о том, что первая таким образом
> созданная форма будет главной.
Совершенно верно. Главная форма назначается в функции Application.CreateForm. Но: 1) никто не отменял Application.MainForm, 2) логотип должен создаваться и вызываться из главной формы до ее показа, а раз так, то главная форма уже создана и именно она является главной для проекта.
← →
Alexander Vasjuk (2003-09-26 15:13) [20]Nikolay M. © (26.09.03 15:08) [19]
ранее ты ссылался на Borland.
Попробуй создай новый проект из репозитория Application with Logo и посмотри как Borland там это реализует.
(А реализует он это именно TLogoForm.Create)
← →
Nikolay M. (2003-09-26 15:14) [21]Пардон, насчет Application.MainForm конечно погорячился - свойство ReadOnly.
← →
Alexander Vasjuk (2003-09-26 15:21) [22]И что ч того что оидонли, это же ссылка.
← →
Nikolay M. (2003-09-26 15:46) [23]
> [22]
То, что нельзя сделать Application.MainForm := Form2;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.10.09;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.012 c