Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Создание форм [D5, WinXP]


j_onion ©   (2002-06-14 10:19:00) 

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


kull   (2002-06-14 12:52:00) [1]


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


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


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


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

Romkin © (14.06.02 11:36)

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

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

С уважением,


Romkin   (2002-06-14 11:36:00) [3]

А вот с 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:02:00) [4]

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, это Пачеко с Тейксейрой воду мутят :-)))


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


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

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


Romkin   (2002-06-14 10:55:00) [6]

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

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

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


Song   (2002-06-14 10:49:00) [7]

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


kull   (2002-06-14 10:45:00) [8]

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


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

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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо