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

Вниз

О разнице вариантов создания формы ...   Найти похожие ветки 

 
Andrey V. ©   (2003-10-29 14:02) [0]

Вариант 1
Application.CreateForm(TUserForm, UserForm);
try
UserForm.ShowModal;
finally
UserForm.Free;
end;

Вариант 2
with TUserForm.Create(Application) do begin
try
ShowModal;
finally
Free;
end;{try}
end;{with}

Если я иду по варианту 2 , то если я попытаюсь сделать что-то типа UserForm.Height:=UserForm.Height+UserForm.Height;
Получаю исключение. Я долго не мог понять , что за ерунда , ну да ладно это еще можно понять.
Но тут я попробовал примерно так :
Application.CreateForm(TUserForm, UserForm);
try
{ничего}
finally
UserForm.Free;
^^^^^^^^^^^^^^^^^^^^^
end;
и следом :
with TUserForm.Create(Application) do begin
try
ShowModal;
finally
Free;
end;{try}
end;{with}
То UserForm.Height:=UserForm.Height+UserForm.Height;
отрабатывает нормально .
Значит ли это что выделенноя строка не освобождает память ??

Еще раз поворю для понимания
Если идет вар2 - исключение(при обращении через UserForm...).
Если подряд вар1 и вар2 - все Ок.


 
Reindeer Moss Eater ©   (2003-10-29 14:08) [1]

Если я иду по варианту 2 , то если я попытаюсь сделать что-то типа UserForm.Height:=UserForm.Height+UserForm.Height;

то надо Height:=Height + Height;


 
Anatoly Podgoretsky ©   (2003-10-29 14:08) [2]

Нет, это означает только одно, что тебе повезло


 
Skier ©   (2003-10-29 14:09) [3]


> Если я иду по варианту 2 , то если я попытаюсь сделать что-то
> типа UserForm.Height:=UserForm.Height+UserForm.Height;

Ответь для себя на такой вопрос :
Кто в варианте 2 инициализирует указатель UserForm ?


 
Reindeer Moss Eater ©   (2003-10-29 14:11) [4]

Лучше не "кто?", а "ну и где же?"

:)


 
Skier ©   (2003-10-29 14:12) [5]

>Reindeer Moss Eater © (29.10.03 14:11) [4]
Тоже годится.


 
Andrey V. ©   (2003-10-29 14:20) [6]

То есть вариант 2 - МастДай ?

2Reindeer Moss Eater :

>то надо Height:=Height + Height;

а если из др.формы ?
да и "Height" это я для простоты .


 
Reindeer Moss Eater ©   (2003-10-29 14:22) [7]

а если из др.формы ?

нужна ссылка на экземпляр другой формы

да и "Height" это я для простоты .

Так и я не для сложноты


 
Плохиш_   (2003-10-29 14:31) [8]

>Andrey V. © (29.10.03 14:20) [6]

Только поняв, что TUserForm не имеет никакого отношения к UserForm, ты поймёшь какой вариант лучше.


 
Anatoly Podgoretsky ©   (2003-10-29 14:33) [9]

Вот теперь самый моемент признаться, с пказаниями - а где план аэродрома, то есть где это таинственное UserForm.Height:=UserForm.Height+UserForm.Height; и почему ты к нему обращаешься не имея UserForm


 
Юрий Зотов ©   (2003-10-29 14:50) [10]

> Andrey V.

Application.CreateForm(TUserForm, UserForm) - создает экземпляр класса TUserForm и инициализирует переменную UserForm ссылкой на этот экземпляр.

TUserForm.Create(Application) - ТОЛЬКО создает экземпляр класса TUserForm и ничего не инициализирует. Значение переменной UserForm при этом не изменяется и потому попытка обращения к ней, как к ссылке на объект может привести к любым результатам. Что у Вас и происходит.



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

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

Наверх




Память: 0.49 MB
Время: 0.072 c
4-42277
samson
2003-09-12 10:54
2003.11.13
сообщение в момент выполнения запроса


14-41911
GOOD
2003-10-21 00:47
2003.11.13
Нужна помощь!


3-40835
valmont
2003-10-21 20:11
2003.11.13
Fast Report


1-41378
_Agent_
2003-10-30 13:32
2003.11.13
Вопрос по Thread, мож кто прояснит в чём дело...


3-40933
stud
2003-10-17 11:39
2003.11.13
события в файрберд