Главная страница
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.033 c
14-42009
Vlad Oshin
2003-10-24 10:12
2003.11.13
Никто не в курсе куда Outlook пишет блокируемые адреса?


6-41859
mao
2003-09-11 11:09
2003.11.13
Сложно создать приложение для работы с локальной сетью?


4-42300
Andriy Tysh
2003-09-17 17:48
2003.11.13
Resize колонок в DBGrid е


1-41652
snlnik
2003-10-19 20:10
2003.11.13
проверка существования ключа в реестре


6-41843
Zelikovsky Eugene
2003-09-11 12:46
2003.11.13
В Delphi 5 был такой компанент TNMHTTP?