Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.10.05;
Скачать: CL | DM;

Вниз

корректно ли такое динамич создание форм?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.018 c
15-1218525210
oldman
2008-08-12 11:13
2008.10.05
Последовательность действий при заправке кардриджа (лазер)


4-1197319990
ДжонС
2007-12-10 23:53
2008.10.05
JPG загрузить


15-1218804027
*Pavel
2008-08-15 16:40
2008.10.05
Сеть между PC-DOS и Windows XP через null-modem-ный кабель


15-1219046504
Vlad Oshin
2008-08-18 12:01
2008.10.05
Отладка программы. Ничего не понимаю..


15-1218506164
Slider007
2008-08-12 05:56
2008.10.05
С днем рождения ! 12 августа 2008 вторник