Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1219924155
workbench
2008-08-28 15:49
2008.10.05
ftp-клиент, IdFTP


15-1218782116
Dennis I. Komarov
2008-08-15 10:35
2008.10.05
Вопросик по сетке


2-1219848090
fokas
2008-08-27 18:41
2008.10.05
Передача управление стартовой формой процедурам модуля


15-1218874305
Anatoly Podgoretsky
2008-08-16 12:11
2008.10.05
ГМП


2-1219927692
DJones
2008-08-28 16:48
2008.10.05
Событие MouseMove и всплывающее окно.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский