Форум: "Начинающим";
Текущий архив: 2008.10.05;
Скачать: [xml.tar.bz2];
Вниз
корректно ли такое динамич создание форм? Найти похожие ветки
← →
boa (2008-08-21 20:44) [0]есть форма 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;
работает, но корректно ли это?
← →
stas © (2008-08-21 20:49) [1]несовсем.
1 раз нажмешь будет 1 форма
2-n разы будет 2-n форм, а SomeForm будет ссылаться на последнюю.
← →
Тын-Дын © (2008-08-21 21:00) [2]
> boa (21.08.08 20:44)var
Form3: TForm3;
SomeForm: TForm4=nil;
procedure TForm3.Button1Click(Sender: TObject);
begin
if not Assigned(SomeForm) then
begin
SomeForm := TForm4.Create(Application);
SomeForm.Tag := integer(Addr(SomeForm));
SomeForm.Show;
end;
end;procedure TForm4.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
TForm4(pointer(Tag)^) := nil;
end;
← →
Anatoly Podgoretsky © (2008-08-21 22:13) [3]> boa (21.08.2008 20:44:00) [0]
Корректно, если только не будешь использовать переменную SomeForm
← →
Германн © (2008-08-22 00:28) [4]
> boa (21.08.08 20:44)
Почитай ещё эту статью:
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=342
Уверен будет полезно и многие дальнейшие вопросы отпадут.
← →
Leonid Troyanovsky © (2008-08-22 13:14) [5]
> Тын-Дын © (21.08.08 21:00) [2]
> var
> Form3: TForm3;
> SomeForm: TForm4=nil;
Во-первых, глобальные переменные MD.
Во-вторых, глобальные переменные и так обнуляются, RTFM.
> TForm4(pointer(Tag)^) := nil;
Очень трогательно выглядит TForm4().
--
Regards, LVT.
← →
Leonid Troyanovsky © (2008-08-22 13:24) [6]
> Тын-Дын © (21.08.08 21:00) [2]
Да, и тема SomeForm.Free - не раскрыта.
--
Regards, LVT.
← →
Тын-Дын © (2008-08-22 19:09) [7]
> Во-первых, глобальные переменные MD.
Глобальная переменная для объекта формы и так существует, так какая разница, как она будет писаться?
> Во-вторых, глобальные переменные и так обнуляются, RTFM.
Неужели? Т.е., если я напишу Form.Create, а потом Form.Free, то переменная Form обнулится?
> Очень трогательно выглядит TForm4().
TObject() будет менее трогательно выглядеть?
← →
Тын-Дын © (2008-08-22 19:09) [8]PS.
"Я знаю, что Земля не кругая."
← →
Тын-Дын © (2008-08-22 19:26) [9]
> Да, и тема SomeForm.Free - не раскрыта.
> procedure TForm4.FormClose(Sender: TObject; var Action:
> TCloseAction);
> begin
> Action := caFree;
> TForm4(pointer(Tag)^) := nil;
> end;
← →
Игорь Шевченко © (2008-08-22 19:27) [10]Leonid Troyanovsky © (22.08.08 13:14) [5]
> Во-первых, глобальные переменные MD.
не, они полезны, если их есть в нужное время под нужным соусом.
Тын-Дын © (22.08.08 19:09) [7]
> Глобальная переменная для объекта формы и так существует,
> так какая разница, как она будет писаться?
С этого момента подробнее, плз, насчет фразы "и так существует"
← →
Тын-Дын © (2008-08-22 21:16) [11]
> С этого момента подробнее, плз, насчет фразы "и так существует"
При создании формы в IDE в модуле описания формы создаётся глобальная переменная. Вот так вот она и существует...
← →
Юрий Зотов © (2008-08-22 22:46) [12]Опция "Автосоздание форм" у меня отключена по жизни. Поэтому: как правило, первое, что я делаю СРАЗУ после "New Form" - это убиваю такую переменную.
Как правило - но не всегда. Они бывают и полезны. Надо просто понимать, что, зачем и почему ты делаешь. И как это нужно делать, чтобы потом не стало мучительно больно.
← →
McSimm © (2008-08-23 00:15) [13]
>
> > Во-вторых, глобальные переменные и так обнуляются, RTFM.
>
> Неужели? Т.е., если я напишу Form.Create, а потом Form.Free,
> то переменная Form обнулится?
Нет, будет ровно то же, что и при SomeForm: TForm4=nil;
← →
Германн © (2008-08-23 00:49) [14]
> Т.е., если я напишу Form.Create, а потом Form.Free,
> то переменная Form обнулится?
>
Улыбнуло явной глупостью. Только сейчас её заметил.
:)
← →
Тын-Дын © (2008-08-23 01:56) [15]
> Германн © (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 02:03) [16]
> ын-Дын © (23.08.08 01:56) [15]
>
>
> > Германн © (23.08.08 00:49) [14]
> >
> > > Т.е., если я напишу Form.Create, а потом Form.Free,
> > > то переменная Form обнулится?
> > >
> >
> > Улыбнуло явной глупостью. Только сейчас её заметил.
> > :)
>
>
> Улыбайся. Хорошее настроение - это хорошо.
> Но иногда читай вдумчиво ветку, и цитаты приводи полностью
> - не выжимки.
> Учись понимать, что пишут другие, а не то, что тебе кажется.
>
>
Улыбнулся ещё раз.
← →
Leonid Troyanovsky © (2008-08-23 10:24) [17]
> Игорь Шевченко © (22.08.08 19:27) [10]
> Leonid Troyanovsky © (22.08.08 13:14) [5]
Непедагогично ;)
--
Regards, LVT.
← →
Тын-Дын © (2008-08-23 12:45) [18]
> Leonid Troyanovsky © (23.08.08 10:24) [17]
>
> > Игорь Шевченко © (22.08.08 19:27) [10]
>
> > Leonid Troyanovsky © (22.08.08 13:14) [5]
>
> Непедагогично ;)
Великий Мао, здесь не Китай, а форум. Спустись на землю.
← →
Anatoly Podgoretsky © (2008-08-23 12:47) [19]> Тын-Дын (23.08.2008 12:45:18) [18]
Ну вот все трое - Мао, Дже и Дун собрались.
← →
Плохиш © (2008-08-23 14:47) [20]
> корректно ли такое динамич создание форм?
>
> boa (21.08.08 20:44)
Синтаксически - да, логически - в помойку.
← →
Игорь Шевченко © (2008-08-23 15:02) [21]Leonid Troyanovsky © (23.08.08 10:24) [17]
> Непедагогично ;)
Наиболее педагогично - это ремнем по попе :) И приговаривать: "Не используй глобальные переменные всуе"
← →
boa (2008-08-23 23:38) [22]
> Плохиш ©
> Синтаксически - да, логически - в помойку.
ветка ведь для Начинающих - объясни хоть в нескольких словах, почему в помойкеу?
совсем нельзя использовать такой подход или можно, но в таких-то случаях?
← →
Anatoly Podgoretsky © (2008-08-24 00:15) [23]Можно, если не использовать переменную в дальнейшем, например для массового создания форм, где нужна ссылка на форму. Но обычно такое деляют для других компонент.
← →
Германн © (2008-08-24 00:16) [24]
> boa (23.08.08 23:38) [22]
>
>
> > Плохиш ©
>
>
> > Синтаксически - да, логически - в помойку.
>
>
> ветка ведь для Начинающих - объясни хоть в нескольких словах,
> почему в помойкеу?
> совсем нельзя использовать такой подход или можно, но в
> таких-то случаях?
Тебе мало того, что уже было сказано в этой ветке?
Или хочешь чтобы наш форумский бюргер дал тебе ответ на языке страны местожительства? :)
← →
Германн © (2008-08-24 00:22) [25]
> Anatoly Podgoretsky © (24.08.08 00:15) [23]
>
> Можно, если не использовать переменную в дальнейшем, например
> для массового создания форм, где нужна ссылка на форму.
Хм. С третьего раза понял смысл фразы. :(
> Но обычно такое деляют для других компонент.
>
Угу. Я так создаю экземпляры классов TObject для занесения их в TList, юо иначе без переменной это никак не сделаешь. Но в моем случае эта переменная - локальная.
← →
Anatoly Podgoretsky © (2008-08-24 00:26) [26]> Германн (24.08.2008 0:22:25) [25]
Ну конечно обычно локальная, смысла в глобальной нет вообще.
← →
Плохиш © (2008-08-24 11:02) [27]
> boa (23.08.08 23:38) [22]
> ветка ведь для Начинающих - объясни хоть в нескольких словах,
> почему в помойкеу?
"Глаза режет", как объяснение пойдёт?
← →
Тын-Дын © (2008-08-24 12:22) [28]Удалено модератором
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.10.05;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.007 c