Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как передать в создаваемую форму параметр, как в функцию


Layner ©   (2006-06-09 08:50:00) 

Здравствуйте! Возможно ли сделать такой трюк, создаю форму
Application.CreateForm(Tfquestion, fquestion);
fquestion.ShowModal;


И надо как то передать этой форме параметр, как в функцию или процедуру. Чтобы на этой fquestionпо OnCreateсоздались какие то элементы в нужном количестве. А потом уже сделать ShowModal.

Выход есть например такой, у меня есть mainform, в ней объявленна переменная, этой переменной я присвоиваю занчение, и затем, при создании fquestion, читаю fquestionиз mainform, данные, которые надо казать в fquestion, т.е. получается как бы без третьей формы(unit..) не обойтись, служащей в качестве "диспетчера". А вот можно ли обойтись без этого "диспетчера"?


Игорь Шевченко   (2006-06-09 11:43:00) [1]

Сергей М. ©   (09.06.06 10:52) [8]

Да, конечно :)


Сергей М.   (2006-06-09 10:52:00) [2]


> reintroduce;


А еще лучше

constructor Create Special(AOwner: TComponent; SomeParameter: TSomeType);


Игорь Шевченко   (2006-06-09 10:47:00) [3]


>  constructor Create(AOwner: TComponent; SomeParameter: TSomeType);


reintroduce;


Ega23   (2006-06-09 10:45:00) [4]


> Спасибо, разобрался. Есть ещё такой один нюанс, если в fquestion.
> OnCreate написать
> fquestion.Width:=600;
> fquestion.Height:=600;


Внутри методов класса можешь Self использовать вместо имени объекта fquestion


Сергей М.   (2006-06-09 10:39:00) [5]


> Layner ©   (09.06.06 10:27) [4]


Событие OnCreate возникает еще дотого как ссылка на созданную форму будет записана в переменную fquestion, потому и
> вылетает AccesVial


Layner   (2006-06-09 10:27:00) [6]

Спасибо, разобрался. Есть ещё такой один нюанс, если в fquestion.OnCreateнаписать
fquestion.Width:=600;
fquestion.Height:=600;

То вылетает AccesVial..
А если в конструкторе написать
Width:=600;
Height:=600;
То все ок. :)


ЮЮ   (2006-06-09 10:02:00) [7]

var
 somePar: TSomeType;
 fquestion: Tfquestion;
begin
...

 somePar := ....
 fquestion := Tfquestion.Create(Application{можно nill}, somePar);
 try
   fquestion.ShowModal;
   ...
 finally
   fquestion.Free;
 end;


Layner   (2006-06-09 09:39:00) [8]

Сергей, спасибо за исчерпывающий ответ, все понял, а как ещё создать эту самую форму, т.е. как ее вызвать? Раньше вызывал как в коде [1], а сейчас как ее вызвать?


Сергей М.   (2006-06-09 09:29:00) [9]

type

Tfquestion = class(TForm)
private
..
 FParameter: TSomeType;
..
public
..
 constructor Create(AOwner: TComponent; SomeParameter: TSomeType);
..
end;

..

constructor Tfquestion.Create(AOwner: TComponent; SomeParameter: TSomeType);
begin
 inherited Create(AOwner);
 FParameter := SomeParameter;
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо