Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.014 c
1-27600
tos
2003-09-28 17:20
2003.10.09
glscene


1-27487
student
2003-09-25 16:17
2003.10.09
проблема с реестром


4-27783
Xoy
2003-08-02 15:48
2003.10.09
Можно поставить хук на вызов определенной функции DLL?


1-27437
X-shadow
2003-09-28 08:11
2003.10.09
Как програмно поставить фоном рабочего стола HTML страничку


1-27547
starik30
2003-09-24 11:19
2003.10.09
Hint для Grid-a





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский