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

Вниз

динамическая загрузка форм   Найти похожие ветки 

 
valerchik   (2004-02-04 09:13) [0]

как сделать вторую форму, чтоб она подгружалась динамически, а потом в конце её фрикнуть.

Try
Application.CreateForm(Tfa_SelectParam, fa_SelectParam);

всякие обработчики....

Finally
fa_SelectParam.Free;
End;

не работает :(


 
Sergey_Masloff   (2004-02-04 09:15) [1]


with TYourForm.Create(Application|Self|nil) do
try
....код
ShowModal();
finally
Free();
end;


Application.CreateForm вызывать нет смысла (хотя и можно)


 
Nikolay M. ©   (2004-02-04 10:10) [2]


> не работает :(

Почему? Как именно не работает?


 
Sphinx ©   (2004-02-04 11:17) [3]

Из книги Фаронова оп Делфи 6 (копирайт и все такое):
...Для этого в окне менеджера проекта ссылки на формы которые необходимо создавать динамически переносятся в панель Available forms, а обращение к окну реализуется так:


if not Assigned(Form2) then //Проверяем: оконный объект создан?
Form2:=TForm2.Create(Self); //Нет-создаем его
if Form2.ShowModal=mrXXX then... //и используем


у меня работало без проблем и в Д6 и в Д7

когда тебе эта форма не нужна тогда и делай Form2.Free


 
Плохиш   (2004-02-04 11:22) [4]


>не работает :(

Так и говорит "Не работаю"?


 
Тимохов ©   (2004-02-04 11:31) [5]


> >не работает :(

По моему опыту присутсвия на данном форуме, часто бывает, что имеет в виду синтаксическая ошибка - например не описанный идентификатор fa_SelectParam :)))


 
Sandman25 ©   (2004-02-04 11:34) [6]

[3] Sphinx © (04.02.04 11:17)

Только не Form2.Free, а FreeAndNil(Form2).


 
Семен Сорокин ©   (2004-02-04 11:36) [7]

Sphinx © (04.02.04 11:17) [3]
if not Assigned(Form2) then //Проверяем: оконный объект создан?
Form2:=TForm2.Create(Self); //Нет-создаем его
if Form2.ShowModal=mrXXX then... //и используем

когда тебе эта форма не нужна тогда и делай Form2.Free

ну тогда уж если на Assigned проверяешь, то надо делать FreeAndNil.


 
Sergey_Masloff   (2004-02-04 11:41) [8]

Вобщем сой код самый лучший (надежный)
1) Не нужна статическая переменная
2) Не надо ничего проверять на nil
3) Не надо применять сомнительный метод FreeAndNil


 
Тимохов ©   (2004-02-04 11:43) [9]


> Sergey_Masloff (04.02.04 11:41) [8]

Полностью согласен.
Хотелось бы добавить, что лучше для формы использовать не free, а release.


 
Семен Сорокин ©   (2004-02-04 11:44) [10]

Sergey_Masloff (04.02.04 11:41) [8]
согласен, я тоже всегда так делаю для модальных форм. А если это MDIChild? :))


 
Sandman25 ©   (2004-02-04 11:48) [11]

[8] Sergey_Masloff (04.02.04 11:41)

Часто нужно сделать форму при первом вызове, но потом ее не удалять (вдруг еще понадобится). Тогда без проверки на assigned никак :)


 
Плохиш   (2004-02-04 11:51) [12]

Так :-)
Автор пошёл дворником тренироваться :-)
А остальные переливают из пустого в порожнее по ...надцатаму разу :-|


 
Sphinx ©   (2004-02-04 11:54) [13]

Погодите, а в чем принципиальная разница между просто Free и FreeAndNil???
Проверял под Win 2k, XP память освобождалась. К примеру программа занимает 6МБ оперативки, вызываю форму - занимает 7МБ; "освобождаю" форму - 6.1МБ.
0.1МБ это и есть разница между Free и FreeAndNil? Я так понял, что при Free форма то уничтожается, но в памяти хранится какая-то ссылка на этот объект.
В хелпе просто сказано что FreeAndNil для уничтожения любого потомка TObject.
Можно чуть по подробнее разъяснить разницу между этими двумя методами, или к статье какой отослать?


 
Тимохов ©   (2004-02-04 11:55) [14]


> Можно чуть по подробнее разъяснить разницу между этими двумя
> методами, или к статье какой отослать?

А текст freeandnil посмотреть?


 
Плохиш   (2004-02-04 11:56) [15]

>Sphinx © (04.02.04 11:54) [13]
А в соурсы глянуть, религия не позволяет?


 
Sphinx ©   (2004-02-04 12:08) [16]


> Тимохов © (04.02.04 11:55) [14]

там сказано что FreeAndNil для уничтожения любого потомка TObject.


> Плохиш (04.02.04 11:56) [15]

я не настолько владею Делфи чтоб в её же собственных ресурсах возится, могу попробовать, но разбераться долго придется.

[14] и [15]
А сказать слабо???


 
Sandman25 ©   (2004-02-04 12:10) [17]

[16] Sphinx © (04.02.04 12:08)

После уничтожения формы с помощью Free, в Form2 все еще остался ее адрес.
В следующий раз при проверке Assigned(Form2) будет true - новая форма создаваться не будет и при обращении к свойствам/методам form2 может быть Access Violation - форма то уже очищена.


 
Тимохов ©   (2004-02-04 12:12) [18]


> там сказано что FreeAndNil для уничтожения любого потомка
> TObject.

Что прямо в сорсах по русски так и сказано?
Удивительно!
Сказать слабо - раз скажешь, и мимо тебя пройдет возможность научиться учиться. Обидно ведь?


 
Семен Сорокин ©   (2004-02-04 12:15) [19]

мимо тебя пройдет возможность научиться учиться
сильно сказано :)


 
Sphinx ©   (2004-02-04 12:21) [20]

Use FreeAndNil to ensure that a variable is nil (Delphi) or NULL (C++) after you free the object it references. Pass any variable that represents an object as the Obj parameter.

Warning: Obj must be an instance of a TObject descendant.

Демагоги блин :)
>научиться учиться - хе!!!


 
Плохиш   (2004-02-04 13:05) [21]

>Sphinx

>я не настолько владею Делфи чтоб в её же собственных ресурсах возится, могу попробовать, но разбераться долго придется.

Ну если в этом не разберёшься:

procedure FreeAndNil(var Obj);
var
P: TObject;
begin
P := TObject(Obj);
TObject(Obj) := nil; // clear the reference before destroying the object
P.Free;
end;

То только в дворники


 
Sergey_Masloff   (2004-02-04 13:19) [22]

Sphinx © (04.02.04 12:21) [20]
>Warning: Obj must be an instance of a TObject descendant.
в то же время

procedure TForm1.Button1Click(Sender: TObject);
var
i : Integer;
begin
i := 15;
FreeAndNil(i);
end

скомпилируется. ИМХО косяк борландов, если уж MUST тогда
procedure FreeAndNil(var Obj : TObject); хотя бы


 
Sphinx ©   (2004-02-04 21:40) [23]


> procedure FreeAndNil(var Obj : TObject);

Огромной извеняйте!!!
Может в Д5 все и нормально будет строка в [20] взята из Д7, но в принципе особого изменения процедур произойти не должно было, а произошло видимо.
Кстати Д7 при вводе FreeAndNil подписывает в подсказке var :Obj


 
valerchik   (2004-02-04 23:31) [24]

спасибо всем :)
даже не ожидал, что столько ответов будет :)



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

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

Наверх




Память: 0.52 MB
Время: 0.019 c
4-39128
Monk
2003-12-10 15:04
2004.02.13
API в Дельфи 7


4-39130
Vredina
2003-11-21 01:21
2004.02.13
TRichEdit разный цвет шрифта


3-38737
SasaR
2004-01-20 19:00
2004.02.13
rxMemoryDataSet


1-38784
Clift
2004-02-03 15:30
2004.02.13
ColorDialog


3-38670
Rafe
2004-01-24 21:05
2004.02.13
Вылетает ошибка при выходе из программы!!! Причина - Data Module.