Текущий архив: 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.46 MB
Время: 0.033 c