![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
корректно ли такое динамич создание форм?
boa © (2008-08-21 20:44:00)есть форма TForm3 (unit3), она содержит некоторые компоненты...
в unit1 я оглавляю unit3,
var
SomeForm: TForm3;
procedure TForm1.Button3Click(Sender: TObject);
begin
inc(b);
SomeForm := Tform3.Create(self);
SomeForm.Button1.caption:=inttostr(b);
SomeForm.Show;
end;
работает, но корректно ли это?
Тын-Дын (2008-08-24 12:22:00) [1]Удалено модератором
Плохиш (2008-08-24 11:02:00) [2]
> boa (23.08.08 23:38) [22]
> ветка ведь для Начинающих - объясни хоть в нескольких словах,
> почему в помойкеу?
"Глаза режет", как объяснение пойдёт?
Anatoly Podgoretsky (2008-08-24 00:26:00) [3]> Германн (24.08.2008 0:22:25) [25]
Ну конечно обычно локальная, смысла в глобальной нет вообще.
Германн (2008-08-24 00:22:00) [4]
> Anatoly Podgoretsky © (24.08.08 00:15) [23]
>
> Можно, если не использовать переменную в дальнейшем, например
> для массового создания форм, где нужна ссылка на форму.
Хм. С третьего раза понял смысл фразы. :(
> Но обычно такое деляют для других компонент.
>
Угу. Я так создаю экземпляры классов TObject для занесения их в TList, юо иначе без переменной это никак не сделаешь. Но в моем случае эта переменная - локальная.
Германн (2008-08-24 00:16:00) [5]
> boa (23.08.08 23:38) [22]
>
>
> > Плохиш ©
>
>
> > Синтаксически - да, логически - в помойку.
>
>
> ветка ведь для Начинающих - объясни хоть в нескольких словах,
> почему в помойкеу?
> совсем нельзя использовать такой подход или можно, но в
> таких-то случаях?
Тебе мало того, что уже было сказано в этой ветке?
Или хочешь чтобы наш форумский бюргер дал тебе ответ на языке страны местожительства? :)
Anatoly Podgoretsky (2008-08-24 00:15:00) [6]Можно, если не использовать переменную в дальнейшем, например для массового создания форм, где нужна ссылка на форму. Но обычно такое деляют для других компонент.
boa (2008-08-23 23:38:00) [7]
> Плохиш ©
> Синтаксически - да, логически - в помойку.
ветка ведь для Начинающих - объясни хоть в нескольких словах, почему в помойкеу?
совсем нельзя использовать такой подход или можно, но в таких-то случаях?
Игорь Шевченко (2008-08-23 15:02:00) [8]Leonid Troyanovsky © (23.08.08 10:24) [17]
> Непедагогично ;)
Наиболее педагогично - это ремнем по попе :) И приговаривать: "Не используй глобальные переменные всуе"
Плохиш (2008-08-23 14:47:00) [9]
> корректно ли такое динамич создание форм?
>
> boa (21.08.08 20:44)
Синтаксически - да, логически - в помойку.
Anatoly Podgoretsky (2008-08-23 12:47:00) [10]> Тын-Дын (23.08.2008 12:45:18) [18]
Ну вот все трое - Мао, Дже и Дун собрались.
Тын-Дын (2008-08-23 12:45:00) [11]
> Leonid Troyanovsky © (23.08.08 10:24) [17]
>
> > Игорь Шевченко © (22.08.08 19:27) [10]
>
> > Leonid Troyanovsky © (22.08.08 13:14) [5]
>
> Непедагогично ;)
Великий Мао, здесь не Китай, а форум. Спустись на землю.
Leonid Troyanovsky (2008-08-23 10:24:00) [12]
> Игорь Шевченко © (22.08.08 19:27) [10]
> Leonid Troyanovsky © (22.08.08 13:14) [5]
Непедагогично ;)
--
Regards, LVT.
Германн (2008-08-23 02:03:00) [13]
> ын-Дын © (23.08.08 01:56) [15]
>
>
> > Германн © (23.08.08 00:49) [14]
> >
> > > Т.е., если я напишу Form.Create, а потом Form.Free,
> > > то переменная Form обнулится?
> > >
> >
> > Улыбнуло явной глупостью. Только сейчас её заметил.
> > :)
>
>
> Улыбайся. Хорошее настроение - это хорошо.
> Но иногда читай вдумчиво ветку, и цитаты приводи полностью
> - не выжимки.
> Учись понимать, что пишут другие, а не то, что тебе кажется.
>
>
Улыбнулся ещё раз.
Тын-Дын (2008-08-23 01:56:00) [14]
> Германн © (23.08.08 00:49) [14]
>
> > Т.е., если я напишу Form.Create, а потом Form.Free,
> > то переменная Form обнулится?
> >
>
> Улыбнуло явной глупостью. Только сейчас её заметил.
> :)
Улыбайся. Хорошее настроение - это хорошо.
Но иногда читай вдумчиво ветку, и цитаты приводи полностью - не выжимки.
Учись понимать, что пишут другие, а не то, что тебе кажется.
> McSimm © (23.08.08 00:15) [13]
>
>
> Нет, будет ровно то же, что и при SomeForm: TForm4=nil;
см.
> Тын-Дын © (22.08.08 19:09) [8]
> PS.
>
> "Я знаю, что Земля не кругая."
Как же все любят уцепиться за совершенно незначимую в данном случае вещь - код, который подчёркивает необходимость обнулять ссылку на TForm.
------------
В соседней ветке обсуждение развели на сотню постов.
А ведь везде нужна умеренность.
И в каждом конкретном случае решение может быть уникальным, а не "рекомендуемым".
В данном случае это одно из решений. Ничем не хуже других.
Германн (2008-08-23 00:49:00) [15]
> Т.е., если я напишу Form.Create, а потом Form.Free,
> то переменная Form обнулится?
>
Улыбнуло явной глупостью. Только сейчас её заметил.
:)
McSimm (2008-08-23 00:15:00) [16]
>
> > Во-вторых, глобальные переменные и так обнуляются, RTFM.
>
> Неужели? Т.е., если я напишу Form.Create, а потом Form.Free,
> то переменная Form обнулится?
Нет, будет ровно то же, что и при SomeForm: TForm4=nil;
Юрий Зотов (2008-08-22 22:46:00) [17]Опция "Автосоздание форм" у меня отключена по жизни. Поэтому: как правило, первое, что я делаю СРАЗУ после "New Form" - это убиваю такую переменную.
Как правило - но не всегда. Они бывают и полезны. Надо просто понимать, что, зачем и почему ты делаешь. И как это нужно делать, чтобы потом не стало мучительно больно.
Тын-Дын (2008-08-22 21:16:00) [18]
> С этого момента подробнее, плз, насчет фразы "и так существует"
При создании формы в IDE в модуле описания формы создаётся глобальная переменная. Вот так вот она и существует...
Игорь Шевченко (2008-08-22 19:27:00) [19]Leonid Troyanovsky © (22.08.08 13:14) [5]
> Во-первых, глобальные переменные MD.
не, они полезны, если их есть в нужное время под нужным соусом.
Тын-Дын © (22.08.08 19:09) [7]
> Глобальная переменная для объекта формы и так существует,
> так какая разница, как она будет писаться?
С этого момента подробнее, плз, насчет фразы "и так существует"
Тын-Дын (2008-08-22 19:26:00) [20]
> Да, и тема SomeForm.Free - не раскрыта.
> procedure TForm4.FormClose(Sender: TObject; var Action:
> TCloseAction);
> begin
> Action := caFree;
> TForm4(pointer(Tag)^) := nil;
> end;