Форум: "Основная";
Текущий архив: 2002.06.27;
Скачать: [xml.tar.bz2];
ВнизСоздание форм Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.006 c