Главная страница
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.054 c
7-42212
mdsns
2003-08-26 13:17
2003.11.13
Буфер CОМ-порта


1-41300
zapped
2003-10-31 10:19
2003.11.13
Run


9-40759
G a m e r
2003-05-05 19:02
2003.11.13
Исходники Warcraft 2000! :)


3-40867
pok
2003-10-21 11:01
2003.11.13
Переход от D6 на D7, проблема с отчотами....


7-42187
xer
2003-08-29 11:04
2003.11.13
Программирование COM порта..