Создание одинаковых форм

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

gesper
Сообщения: 13
Зарегистрирован: 14 фев 2005, 18:35
Откуда: общество openwww

Кто чем может подскажите!
Пишу программу которая выводит сообщения в спец. окне, Как сделать чтобы можно было сразу выводить много таких окон (одинаковых).
Я пробовал создавать одним способом, но в коде формы есть массив и каждое новое окно при создании переписывает этот массив, т.е. он как бы один на все окна. Подскажите как можно создать много одинаковых окон с возможностью индивидуальных массивов и если можно с возможностью обращаться к ним. :type:
Старый глюк лучше новых двух!
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

М.б. сделать инициализацию массива в конструкторе формы, перекрыв конструктор?
И вызывать:

Код: Выделить всё

F := TForm1.Create(Self, MyArray);
...
Изображение
YurikGL
Сообщения: 142
Зарегистрирован: 16 фев 2005, 21:54
Откуда: Уфа
Контактная информация:

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;
gesper
Сообщения: 13
Зарегистрирован: 14 фев 2005, 18:35
Откуда: общество openwww

Как лучше создавать формы?

Вариант 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;
Старый глюк лучше новых двух!
YurikGL
Сообщения: 142
Зарегистрирован: 16 фев 2005, 21:54
Откуда: Уфа
Контактная информация:

>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;
gesper
Сообщения: 13
Зарегистрирован: 14 фев 2005, 18:35
Откуда: общество openwww

[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]
Хватит мне расказывать какие формы когда и где создаются!!!!
Я это и без вас знаю, вы скажите как лучше с т.з. расхода рессурсов и скорости, а также возможности доступа к ним.
А создавать формы через массив глупо! Ты не можешь знать сколько у тебя сообщений может за раз вылезти и увеличить массив не сможешь.
Старый глюк лучше новых двух!
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

лично я предпочитаю не выделять явно переменные для временных форм (ленивый я :) )
делаю типа того:

Код: Выделить всё

...
with TMyForm.Create(Self) do
try
  if ShowModal=mrOK then 
  begin
    // чего-то делаю
  end;
finally
  Free;
end;
...
Да, а кипятиться так не надо, человек помочь хотел... Уровень твоей подготовки из вопроса не определить... :)
gesper
Сообщения: 13
Зарегистрирован: 14 фев 2005, 18:35
Откуда: общество openwww

Игорь Акопян писал(а): Да, а кипятиться так не надо, человек помочь хотел... Уровень твоей подготовки из вопроса не определить... :)
Я просил только сказать как сделать много форм одинаковых с индивид. внутренними переменными,а не расказывать как и где создаются формы. Если обидел кого ИЗВЕНИТЕ. :type:
Старый глюк лучше новых двух!
YurikGL
Сообщения: 142
Зарегистрирован: 16 фев 2005, 21:54
Откуда: Уфа
Контактная информация:

>как сделать много форм одинаковых с индивид. внутренними переменными
Так формы должны быть одинаковыми или нет?
Если одинаковыми то, создаем нужную форму в конструкторе форм, т.е. бросаем на нее те компоненты. Далее

Убрать ее из 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...

Если я все же не понял вопрос - поясните его....
gesper
Сообщения: 13
Зарегистрирован: 14 фев 2005, 18:35
Откуда: общество openwww

Попытаюсь как можно точнее сказать.
Есть главная форма,есть форма для выдачи сообщений.
Главная форма выводит сообщения когда придет время.
Данные главная форма передает в Форму сообщений через процедуру SendData которую я поместил в форму сообщений. Процедура записывает переданные через нее данные в массив . Проблема в том что при создании новой копии формы при работе таких же копий массив у всех переписывается и данные получаются одни и теже. Он якобы один на всех.
Старый глюк лучше новых двух!
Ответить