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

Вниз

Создание форм   Найти похожие ветки 

 
j_onion ©   (2002-06-14 10:19) [0]

Я создаю форму вызовом Application.createform, а освобождаю ее form.release. Может кто-нибудь сказать, корроктна такая последовательность, или нет. Смутные сомнения терзают меня


 
Игорь Шевченко ©   (2002-06-14 10:41) [1]

Вопрос сам по себе некорректный. Без кода.

А освобождать можно хоть release, хоть free - в зависимости от того, в каком месте освобождение происходит


 
kull ©   (2002-06-14 10:45) [2]

Ну что вас всех тянет на этот Release?
Ни в одном примере нет такого способа закрытия формы...


 
Song ©   (2002-06-14 10:49) [3]

Некорректна. Система сама осовоюождает автоматически созданные формы.


 
Виктор Щербаков ©   (2002-06-14 10:55) [4]


> Ну что вас всех тянет на этот Release?

Почитай в хэлпе про Release, или попробуй захлопнуть форму из обработчика её события.


 
Romkin ©   (2002-06-14 10:55) [5]

У меня очень много кода вида

Application.CreateForm(TfrmDummy, frmDummy);
try
frmDummy.ShowModal;
finally
frmDummy.release;
end;

Что здесь некорректного? Я уверен, что данный отрывок будет работать на всех платформах win32 без сюрпризов (и работает :-)))
2kull: а что вас всех тянет на TForm.Free?
2Song: нафиг ждать, пока приложение закроется? Ресурсы не резиновые...


 
Игорь Шевченко ©   (2002-06-14 11:02) [6]

Romkin © (14.06.02 10:55)

У меня очень много кода вида


procedure TfMain.ShowModalForm(FormClass: TFormClass);
begin
with FormClass.Create(Self) do
try
ShowModal();
finally
Free();
end;
end;


И соответственно,

ShowModalForm(TForm1);
ShowModalForm(TForm2);
ShowModalForm(TForm3);

В разных местах программы.

Ни я, ни наши заказчики ни разу не сталкивались с проблемами в этой части.

Более того, пример из Demos Borland"a


procedure TMainForm.About1Click(Sender: TObject);
begin
AboutBox := TAboutBox.Create(Self);
try
AboutBox.ShowModal;
finally
AboutBox.Free;
end;
end;


IMHO, это Пачеко с Тейксейрой воду мутят :-)))



 
Romkin ©   (2002-06-14 11:36) [7]

А вот с Free надо поосторожнее.. У QReport есть довольно неприятная ошибка (может, в 3.5 исправили, не проверял): при preview при использовании стандартной формы после закрытия некоторых сложных отчетов возникала AV, и после другие preview выдавали "Form QRPreview already exists". Вызвано, ИМХО, это тем, что вызывается QRPreview.Free, а не release. Приходилось делать Application.processmessages, чтобы очередь сообщений выбиралась перед уничтожением (или свое preview, висящее постоянно).
2Игорь Шевченко: я много раз напарывался на AV именно из-за TForm.Free, насчет того, что проблем нет - по-видимому, используются быстрые станции, и очередь сообщений успевает обработаться. Попробуй P166 :-))
Вообще-то я не вижу причины, почему надо писать именно Free, с тем же успехом можно везде писать Release, что я и делаю. Возможно, сейчас это уже не актуально, но я считаю, что лишняя защищенность кода не повредит...


 
Игорь Шевченко ©   (2002-06-14 11:52) [8]

Romkin © (14.06.02 11:36)

Я использовал QuickReport.PreviewModal, и от этого сообщения избавился. Правда, дургие проблемы появились. QuiсkReport плохо написан, IMHO.

Я пробовал на разных процессорах :-)
Для release, IMHO, определено свое место - в обработчиках событий от компонент формы и собственно формы. В случае внешнего освобождения, особенно после ShowModal, все сообщения успевают обрабатываться и я не вижу ситуации, когда после вызова Free может прийти сообщение окну формы.

С уважением,


 
kull ©   (2002-06-14 12:52) [9]


> Почитай в хэлпе про Release, или попробуй захлопнуть форму
> из обработчика её события.


TForm1.Button1Click(Sender: TObject);
begin
Close;
end;


замечательно работает. :)



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

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

Наверх




Память: 0.49 MB
Время: 0.016 c
1-88952
Иван
2002-06-14 23:38
2002.06.27
Wrapper на ActiveX делает нехорошие вещи


1-88886
Nebula
2002-06-14 13:58
2002.06.27
Delphi & COM


3-88759
SuperVK
2002-06-03 07:10
2002.06.27
Реакция TDBNavigator на программное изменение TDBRichEdit


1-88953
Ubermensch
2002-06-15 22:10
2002.06.27
Защита доступа к памяти


14-89021
keymaster
2002-05-03 20:51
2002.06.27
Форум по VCL