Текущий архив: 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