Главная страница
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.03 c
1-41295
Liavik
2003-10-31 13:21
2003.11.13
DateTimePicker


14-42029
REA
2003-10-16 11:30
2003.11.13
Вопросы на экзамен


1-41452
Dim!S
2003-10-29 11:29
2003.11.13
Цветной фон в TEdit


1-41715
Тролль
2003-11-03 17:19
2003.11.13
Перенос пр-р и фуну-ий в другой файл


6-41828
Дмитрий П
2003-09-14 14:27
2003.11.13
Программно изменить адрес шлюза в настройках TCP/IP.