Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.011 c
14-88998
cyborg
2002-05-22 21:28
2002.06.27
Гы?


14-88990
Lord Warlock
2002-05-24 15:03
2002.06.27
Интерфейс и девушка!


3-88764
Ulugbek
2002-06-05 08:51
2002.06.27
Не могу понять где ощибка


1-88806
Voldemar
2002-06-16 15:54
2002.06.27
Фиксирующаяся кнопка


1-88842
Ricks
2002-06-17 14:39
2002.06.27
Использование




   Наверх