Страница 1 из 2
Создание одинаковых форм
Добавлено: 14 фев 2005, 19:20
gesper
Кто чем может подскажите!
Пишу программу которая выводит сообщения в спец. окне, Как сделать чтобы можно было сразу выводить много таких окон (одинаковых).
Я пробовал создавать одним способом, но в коде формы есть массив и каждое новое окно при создании переписывает этот массив, т.е. он как бы один на все окна. Подскажите как можно создать много одинаковых окон с возможностью индивидуальных массивов и если можно с возможностью обращаться к ним. :type:
Добавлено: 15 фев 2005, 16:58
Игорь Акопян
М.б. сделать инициализацию массива в конструкторе формы, перекрыв конструктор?
И вызывать:
Добавлено: 16 фев 2005, 22:00
YurikGL
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;
Добавлено: 16 фев 2005, 22:41
gesper
Как лучше создавать формы?
Вариант 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;
Добавлено: 17 фев 2005, 07:15
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;
позиционирование и все дела...
end;
уничтожать форму можно
procedure form1.close....
free;
Добавлено: 17 фев 2005, 16:53
gesper
[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]
Хватит мне расказывать какие формы когда и где создаются!!!!
Я это и без вас знаю, вы скажите как лучше с т.з. расхода рессурсов и скорости, а также возможности доступа к ним.
А создавать формы через массив глупо! Ты не можешь знать сколько у тебя сообщений может за раз вылезти и увеличить массив не сможешь.
Добавлено: 17 фев 2005, 18:00
Игорь Акопян
лично я предпочитаю не выделять явно переменные для временных форм (ленивый я

)
делаю типа того:
Код: Выделить всё
...
with TMyForm.Create(Self) do
try
if ShowModal=mrOK then
begin
// чего-то делаю
end;
finally
Free;
end;
...
Да, а кипятиться так не надо, человек помочь хотел... Уровень твоей подготовки из вопроса не определить...

Добавлено: 17 фев 2005, 18:45
gesper
Игорь Акопян писал(а):
Да, а кипятиться так не надо, человек помочь хотел... Уровень твоей подготовки из вопроса не определить...
Я просил только сказать как сделать много форм одинаковых с индивид. внутренними переменными,а не расказывать как и где создаются формы. Если обидел кого ИЗВЕНИТЕ. :type:
Добавлено: 17 фев 2005, 21:05
YurikGL
>как сделать много форм одинаковых с индивид. внутренними переменными
Так формы должны быть одинаковыми или нет?
Если одинаковыми то, создаем нужную форму в конструкторе форм, т.е. бросаем на нее те компоненты. Далее
Убрать ее из 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...
Если я все же не понял вопрос - поясните его....
Добавлено: 17 фев 2005, 22:56
gesper
Попытаюсь как можно точнее сказать.
Есть главная форма,есть форма для выдачи сообщений.
Главная форма выводит сообщения когда придет время.
Данные главная форма передает в Форму сообщений через процедуру SendData которую я поместил в форму сообщений. Процедура записывает переданные через нее данные в массив . Проблема в том что при создании новой копии формы при работе таких же копий массив у всех переписывается и данные получаются одни и теже. Он якобы один на всех.