Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.06.03;
Скачать: CL | DM;

Вниз

Метод   Найти похожие ветки 

 
Fantos ©   (2002-05-16 11:52) [40]

Позволю заметить, что ПРИНЦИПИАЛЬНОЕ различие в использовании FREE или RELEASE я прочувствовал на собственных "граблях". И заключались они (грабли) в следующем:
- программа подключала DLL-ку (динамически, в отдельном потоке) с вызовом формы из нее (не модально!). В этом модуле шла работа с устройствами через COM-порты... Так вот, если в интерфейсной процедуре из DLL-ки (вы понимаете о чем я?) ставилось удаление формы через FREE, то основная программа ПРИ или ПОСЛЕ выполнения FREELIBRERY - частенько И НЕ ЗАКОНОМЕРНО вываливала ошибку AV ! Причина -- банальное ОТСУТСТВИЕ обработчика очереди сообщений...форма то уже УДАЛЕНА!
А вот когда FREE была заменена на RELEASE, вот тогда все стало нормально работать и закрываться...
Вот Вам и разница, как говорится - "на пальцах"...

Поэтому, для "выписки рецепта" необходимо, сначала, "обдумать" всю связку удаляемых форм и основного модуля(или формы, если хотите)...


 
Tonie ©   (2002-05-16 12:55) [41]

To KSergey © (15.05.02 16:11)

>PostMessage(Handle, CM_RELEASE, 0, 0);

Ну так в этом и смысл, сообщение CM_RELEASE будет помещено после уже имеющихся в очереди, поэтому и TCustomForm.CMRelease произойдет после того как все оставшиеся сообщения будут обработаны

Кстати Close вызывает Release, поэтому использование Close вместе c ... Action := caFree вполне корректно



procedure TCustomForm.Close;
var
CloseAction: TCloseAction;
begin
if fsModal in FFormState then
ModalResult := mrCancel
else
if CloseQuery then
begin
if FormStyle = fsMDIChild then
if biMinimize in BorderIcons then
CloseAction := caMinimize else
CloseAction := caNone
else
CloseAction := caHide;
DoClose(CloseAction);
if CloseAction <> caNone then
if Application.MainForm = Self then Application.Terminate
else if CloseAction = caHide then Hide
else if CloseAction = caMinimize then WindowState := wsMinimized
else
Release;
end;
end;


 
VetMIg ©   (2002-05-21 14:34) [42]

Спасибо друзья... Я вдоволь начитался. Обязательно попробую ваши советы. И еще раз спасибо :-))))))



Страницы: 1 2 вся ветка

Текущий архив: 2002.06.03;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.014 c
14-7190
Sniffer
2002-04-24 11:37
2002.06.03
Case-пакеты


1-6951
sndanil
2002-05-20 15:05
2002.06.03
Кто это может объяснить?


3-6950
Григорий
2002-05-11 17:22
2002.06.03
Почему BDE на клиенте Win98 не работает с серв.Win2000,Linux?


4-7262
hvs-md
2002-03-31 21:22
2002.06.03
PrinScreen c окна на неактивном рабочем столе.


3-6946
Alexnader
2002-04-29 21:12
2002.06.03
DBGrid и тормоза