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

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

Передача параметра в MDIChild [D7]


xenon ©   (2002-12-20 09:54:00) 

Есть MDI приложение. На дочерней форме стоят несколько TQuery, один из которых - главный, остальные - детальные.
При открытии child-формы ей нужно передать параметр для главного TQuery, открыть его и все остальные.
Подскажите как это организовать.

Дополнительный вопрос:
Добавил в класс дочерней формы поле.
После создания экземпляра формы, записываю в это поле значение.
В OnShow читаю значение. В место записанного значения получаю нуль. Почему?


AlexSV   (2002-12-20 13:13:00) [1]

> xenon ©
> Но по второму вопросу у меня сомнения.
Попробую обяснить по другому:
В Object Inspector"е установи своей форме Visible - False
и посмотри что произойдет с вызовом OnShow.


ЮЮ   (2002-12-20 11:44:00) [2]

За полтора часа давно уже можно было написать пару строк

type TChildForm
...
FMyValue: integer;
procedure SetMyValue(Value: integer);
...
property MyValue:integer read FMyValue write SetMyValue

TChildForm.SetMyValue(Value: integer);
FMyValue := Value;
поставить здесь брекпоин и посмотреть кто прищёл, зачем пришел :-)


xenon   (2002-12-20 11:37:00) [3]

Проблему решил. Сделал свой конструктор, в который передал параметр. Спасибо за совет.

Но по второму вопросу у меня сомнения.
>When a form is being created and its Visible property is True
После вызова Create, Visible = False. Значит OnShow не происходит.
Из хелпа:
Use Show to set the form’s Visible property to true
Значит OnShow должно произойти сейчас.



AlexSV   (2002-12-20 11:06:00) [4]

>xenon ©

NewChild := TChildForm.Create(nil); // создаю
//Происходит
//1. OnCreate
//2. OnShow <<здесь пытаемся читать!>>
//3. OnActivate
//4. OnPaint
Далее
NewChild.MyField := MyValue; // кладу
NewChild.Show; // открываю


Prooksius   (2002-12-20 11:01:00) [5]

2 xenon © (20.12.02 10:57)
OnCreate происходит при создании формы (Create). Из названия видно.


xenon   (2002-12-20 10:57:00) [6]

> ... and its Visible property is True, ...
OnCreate тоже происходит при вызове TForm.Show?


xenon   (2002-12-20 10:53:00) [7]

> Т.е. "...В OnShow читаю значение..." еще до того, как туда чего-то положил.

NewChild := TChildForm.Create(nil); // создаю
NewChild.MyField := MyValue; // кладу
NewChild.Show; // открываю

Я так понимаю: OnShow возникает, при вызове Show.
А к этому моменту значение уже лежит.
Разве не так?


AlexSV   (2002-12-20 10:27:00) [8]

>...При открытии child-формы ей нужно передать параметр для главного TQuery...

Тогда необходимо писать свой метод для создания формы, куда передаеш параметры и уже в нем <child-форма>.Create(...)

>...В OnShow читаю значение...

Смотрим в Help:
When a form is being created and its Visible property is True, the following events occur in the order listed:

1. OnCreate
2. OnShow
3. OnActivate
4. OnPaint

Т.е. "...В OnShow читаю значение..." еще до того, как туда чего-то положил.


Наверх

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