Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.08.2009, 07:35   #1
Superlotles
Пользователь
 
Аватар для Superlotles
 
Регистрация: 18.08.2009
Сообщений: 86
По умолчанию Не могу понять

1)
Код:
Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);//Создали объект TForm2 и записали в переменную Form2
  Application.Run;

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2:=TForm2.Create(Application);//Создали объект TForm2 и записали в переменную Form2
end;

Это получается в памяти могут создаваться переменные с одинаковыми именами





2) Если несколько раз нажать на Button 1 то получается что в переменную Form2 записалось несколько объектов TForm2, а если вызвать метод Form2.Free то по идеи должны 2 переменные Form2 очиститься и все формы убраться,а убирается только последняя

Почему ???
Что я не правильно понимаю
Skype: Lotles-XXXX

Последний раз редактировалось Stilet; 31.08.2009 в 08:09.
Superlotles вне форума Ответить с цитированием
Старый 31.08.2009, 08:05   #2
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

Когда вы нажимаете второй раз на кнопку создать форму
то в переменую Form2 присваивается новый указатель на форму
то и есть когда вы пытаитесь уничтожить Form2.free то и уничтожаете
ту форму на которую записан указатель на Form2;
VintProg вне форума Ответить с цитированием
Старый 31.08.2009, 10:04   #3
Superlotles
Пользователь
 
Аватар для Superlotles
 
Регистрация: 18.08.2009
Сообщений: 86
По умолчанию

Когда я запускаю приложение в переменную Form2 записывается первый указатель на на создание формы TForm2

Когда я нажимаю на кнопку создать форму, то в переменную Form2 записывается еще один указатель на создание формы TForm2

То есть в переменной Form2 записано 2 указателя на создание формы TForm2

Вы говорите, что метод Free удаляет ту форму, на которую указывает указатель в переменной Form2, но ведь в этой переменной записан указатель на 2 формы, а Free удаляет одну
Skype: Lotles-XXXX
Superlotles вне форума Ответить с цитированием
Старый 31.08.2009, 10:07   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
То есть в переменной Form2 записано 2 указателя на создание формы TForm2
Нет. Когда ты на кнопку кликаешь, старый указатель затирается новым, а сама форма остается без переменной, ссылающейся на нее и фактически теряет якорь, становясь мусором.
А Free действует только на ту, которая связана с этой переменной.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.08.2009, 10:20   #5
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

Пользуйся в таких случиах массивом или TList или же TListObject,
у уделяй и ту форму которую выбрал.
VintProg вне форума Ответить с цитированием
Старый 31.08.2009, 11:31   #6
Superlotles
Пользователь
 
Аватар для Superlotles
 
Регистрация: 18.08.2009
Сообщений: 86
По умолчанию

Понятно, только не ясно, как форма может быть без переменной
Skype: Lotles-XXXX
Superlotles вне форума Ответить с цитированием
Старый 31.08.2009, 11:48   #7
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Ну как как... форма создаётся в памяти, в переменной хранится лишь указатель(грубо говоря смещения относительно начала памяти), его можно затереть, таким образом мы потеряем её(формы) местоположение и не сможем к ней обращаться =) а сама форма продолжит существование
netrino вне форума Ответить с цитированием
Старый 31.08.2009, 12:00   #8
Superlotles
Пользователь
 
Аватар для Superlotles
 
Регистрация: 18.08.2009
Сообщений: 86
По умолчанию

Понял. Спасибо. Вы все Super. Форум класс !!!
Skype: Lotles-XXXX
Superlotles вне форума Ответить с цитированием
Старый 31.08.2009, 20:39   #9
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Я не совсем понял что вы делаете...

Вы хотите создать приложение с двумя формами или создавать формы динамически во время выполнения программы?

Если второе, то надо бы их как-то называть (и попутно сделав проверку есть ли уже форма с таким названием):
Код:
Procedure TForm1.Button1Click(Sender: TObject);
Var Obj: TComponent; MyNewForm: TForm;
Begin
Obj:=Application.FindComponent('MyNewForm');
If Obj=Nil Then
      Begin
      MyNewForm:=TForm.Create(Application); // если формы с таким именем не существует - создаём её...
      MyNewForm.Show;
      MyNewForm.Name:='MyNewForm';
      End;
End;

Procedure TForm1.Button2Click(Sender: TObject);
Var Obj: TComponent;
Begin
Obj:=Application.FindComponent('MyNewForm');
If Obj<>Nil Then
      (Obj As TForm).Free; // если такая форма существует - уничтожаем её...
End;
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите пожалуйста не могу понять! Kosoy135 Паскаль, Turbo Pascal, PascalABC.NET 7 28.12.2007 19:08
Не могу понять задание amandra Помощь студентам 11 16.10.2007 10:24
не могу понять... Dutchman Паскаль, Turbo Pascal, PascalABC.NET 4 14.12.2006 07:14
Не могу понять задание Юдифь Помощь студентам 2 12.12.2006 17:40