Создание одинаковых форм
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
Кто чем может подскажите!
Пишу программу которая выводит сообщения в спец. окне, Как сделать чтобы можно было сразу выводить много таких окон (одинаковых).
Я пробовал создавать одним способом, но в коде формы есть массив и каждое новое окно при создании переписывает этот массив, т.е. он как бы один на все окна. Подскажите как можно создать много одинаковых окон с возможностью индивидуальных массивов и если можно с возможностью обращаться к ним. :type:
Пишу программу которая выводит сообщения в спец. окне, Как сделать чтобы можно было сразу выводить много таких окон (одинаковых).
Я пробовал создавать одним способом, но в коде формы есть массив и каждое новое окно при создании переписывает этот массив, т.е. он как бы один на все окна. Подскажите как можно создать много одинаковых окон с возможностью индивидуальных массивов и если можно с возможностью обращаться к ним. :type:
Старый глюк лучше новых двух!
- Игорь Акопян
- Сообщения: 1440
- Зарегистрирован: 13 окт 2004, 17:11
- Откуда: СПБ
- Контактная информация:
М.б. сделать инициализацию массива в конструкторе формы, перекрыв конструктор?
И вызывать:
И вызывать:
Код: Выделить всё
F := TForm1.Create(Self, MyArray);
...

1) меню projects/options/forms убираем нужную форму из autocreate
2) В какой-нибудь форме объявляем
Fmas:array [1..10] of TMyForm
В нужном месте делаем
for i:=1 to 10 do begin
FMas:=TMyForm.create(FormMain)
FMas.show;
позиционирование и все дела...
end;
2) В какой-нибудь форме объявляем
Fmas:array [1..10] of TMyForm
В нужном месте делаем
for i:=1 to 10 do begin
FMas:=TMyForm.create(FormMain)
FMas.show;
позиционирование и все дела...
end;
Как лучше создавать формы?
Вариант 1
Application.CreateForm(TForm1, Form1);
Form1.show;
уничтожать
procedure form1.close....
action:=cafree;
Вариант 2
if form1=nil then
Application.CreateForm(TForm1, Form1);
Form1.show;
уничтожать
procedure form1.close....
action:=cafree;
form1:=nil;
Вариант 3
var
Form1:Tform1;
begin
form1:=tform1.creat(Application);;
Form1.show;
уничтожать
procedure form1.close....
action:=cafree;
Вариант 1
Application.CreateForm(TForm1, Form1);
Form1.show;
уничтожать
procedure form1.close....
action:=cafree;
Вариант 2
if form1=nil then
Application.CreateForm(TForm1, Form1);
Form1.show;
уничтожать
procedure form1.close....
action:=cafree;
form1:=nil;
Вариант 3
var
Form1:Tform1;
begin
form1:=tform1.creat(Application);;
Form1.show;
уничтожать
procedure form1.close....
action:=cafree;
Старый глюк лучше новых двух!
>gesper
Должна быть одна главная форма. Она должна быть одна. Она должна быть AutoCreate. Она появляется первой и существует все время, пока существует приложение в единственном числе. Пусть называется MainForm
Далее, нужно создать форму (NewForm), которых должно быть много. Убрать ее из autocreate.
В главной форме (FormMain) нужно объявить
var
FMas:array[1..5] of TNewForm
В главной же форме нужно создавать нужное количество NewForm-в
for i:=1 to 10 do begin
FMas:=TMyNew.create(FormMain)
FMas.show;
позиционирование и все дела...
end;
уничтожать форму можно
procedure form1.close....
free;
Должна быть одна главная форма. Она должна быть одна. Она должна быть AutoCreate. Она появляется первой и существует все время, пока существует приложение в единственном числе. Пусть называется MainForm
Далее, нужно создать форму (NewForm), которых должно быть много. Убрать ее из autocreate.
В главной форме (FormMain) нужно объявить
var
FMas:array[1..5] of TNewForm
В главной же форме нужно создавать нужное количество NewForm-в
for i:=1 to 10 do begin
FMas:=TMyNew.create(FormMain)
FMas.show;
позиционирование и все дела...
end;
уничтожать форму можно
procedure form1.close....
free;
[quote="YurikGL"]>gesper
Должна быть одна главная форма. Она должна быть одна. Она должна быть AutoCreate. Она появляется первой и существует все время, пока существует приложение в единственном числе. Пусть называется MainForm
Далее, нужно создать форму (NewForm), которых должно быть много. Убрать ее из autocreate.
В главной форме (FormMain) нужно объявить
var
FMas:array[1..5] of TNewForm
В главной же форме нужно создавать нужное количество NewForm-в
for i:=1 to 10 do begin
FMas:=TMyNew.create(FormMain)
FMas.show]
Хватит мне расказывать какие формы когда и где создаются!!!!
Я это и без вас знаю, вы скажите как лучше с т.з. расхода рессурсов и скорости, а также возможности доступа к ним.
А создавать формы через массив глупо! Ты не можешь знать сколько у тебя сообщений может за раз вылезти и увеличить массив не сможешь.
Должна быть одна главная форма. Она должна быть одна. Она должна быть AutoCreate. Она появляется первой и существует все время, пока существует приложение в единственном числе. Пусть называется MainForm
Далее, нужно создать форму (NewForm), которых должно быть много. Убрать ее из autocreate.
В главной форме (FormMain) нужно объявить
var
FMas:array[1..5] of TNewForm
В главной же форме нужно создавать нужное количество NewForm-в
for i:=1 to 10 do begin
FMas:=TMyNew.create(FormMain)
FMas.show]
Хватит мне расказывать какие формы когда и где создаются!!!!
Я это и без вас знаю, вы скажите как лучше с т.з. расхода рессурсов и скорости, а также возможности доступа к ним.
А создавать формы через массив глупо! Ты не можешь знать сколько у тебя сообщений может за раз вылезти и увеличить массив не сможешь.
Старый глюк лучше новых двух!
- Игорь Акопян
- Сообщения: 1440
- Зарегистрирован: 13 окт 2004, 17:11
- Откуда: СПБ
- Контактная информация:
лично я предпочитаю не выделять явно переменные для временных форм (ленивый я
)
делаю типа того:
Да, а кипятиться так не надо, человек помочь хотел... Уровень твоей подготовки из вопроса не определить... 

делаю типа того:
Код: Выделить всё
...
with TMyForm.Create(Self) do
try
if ShowModal=mrOK then
begin
// чего-то делаю
end;
finally
Free;
end;
...

Я просил только сказать как сделать много форм одинаковых с индивид. внутренними переменными,а не расказывать как и где создаются формы. Если обидел кого ИЗВЕНИТЕ. :type:Игорь Акопян писал(а): Да, а кипятиться так не надо, человек помочь хотел... Уровень твоей подготовки из вопроса не определить...![]()
Старый глюк лучше новых двух!
>как сделать много форм одинаковых с индивид. внутренними переменными
Так формы должны быть одинаковыми или нет?
Если одинаковыми то, создаем нужную форму в конструкторе форм, т.е. бросаем на нее те компоненты. Далее
Убрать ее из autocreate.
В главной форме (FormMain) нужно объявить
var
FMas:array[1..5] of TNewForm
В главной же форме нужно создавать нужное количество NewForm-в
for i:=1 to 10 do begin
FMas:=TMyNew.create(FormMain)
FMas.show;
позиционирование и все дела...
end;
Массив можно сделать динамический. Можно сделать не массив, а 33 переменных типа TNewForm
Если тебе нужно NewForm сделать что-то индивидуальное, то нужные компоненты можно добавлять в событии NewForm.OnCreate. Можно конструктор NewForm.Create переобъявить и вызывать метод inherited...
Если я все же не понял вопрос - поясните его....
Так формы должны быть одинаковыми или нет?
Если одинаковыми то, создаем нужную форму в конструкторе форм, т.е. бросаем на нее те компоненты. Далее
Убрать ее из autocreate.
В главной форме (FormMain) нужно объявить
var
FMas:array[1..5] of TNewForm
В главной же форме нужно создавать нужное количество NewForm-в
for i:=1 to 10 do begin
FMas:=TMyNew.create(FormMain)
FMas.show;
позиционирование и все дела...
end;
Массив можно сделать динамический. Можно сделать не массив, а 33 переменных типа TNewForm
Если тебе нужно NewForm сделать что-то индивидуальное, то нужные компоненты можно добавлять в событии NewForm.OnCreate. Можно конструктор NewForm.Create переобъявить и вызывать метод inherited...
Если я все же не понял вопрос - поясните его....
Попытаюсь как можно точнее сказать.
Есть главная форма,есть форма для выдачи сообщений.
Главная форма выводит сообщения когда придет время.
Данные главная форма передает в Форму сообщений через процедуру SendData которую я поместил в форму сообщений. Процедура записывает переданные через нее данные в массив . Проблема в том что при создании новой копии формы при работе таких же копий массив у всех переписывается и данные получаются одни и теже. Он якобы один на всех.
Есть главная форма,есть форма для выдачи сообщений.
Главная форма выводит сообщения когда придет время.
Данные главная форма передает в Форму сообщений через процедуру SendData которую я поместил в форму сообщений. Процедура записывает переданные через нее данные в массив . Проблема в том что при создании новой копии формы при работе таких же копий массив у всех переписывается и данные получаются одни и теже. Он якобы один на всех.
Старый глюк лучше новых двух!