СообЧа > База Знаний > Программирование > Delphi

Вопрос

Исходные данные:

Есть главная форма, которая вызывает доченюю, скажем Form2.Show;

В дочерней форме на событии OnShow висит обработчик, который в процессе каких-то вычислений может выяснить, что показ формы не имеет смысла.

Вопрос, значит такой: Как прекратить загрузку дочернего окна из него же?

Просто Form2.Close; не работает.

Предвижу ответ: «Сначала проверяй, потом вызывай Show»

Обработчик занимает более 2000 строк и выяснится, что грузиться не надо может в любом месте обработчика, а переносить код из дочерней формы в главную — таких дочерних форм 43 штуки, на 2000 умножить? :) Как быть?

Ответ

А как ты создаешь дочерние окна???

Дочерние окна лучше создавать динамически во время работы программы, напримкр так:

В модуле для дочернего окна:

type TFrmChild = class(TForm) procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private declarations } public { Public declarations } end; procedure ActivateFrmChild; var FrmChild: TFrmChild; implementation {$R *.dfm} … procedure ActivateFrmChild; begin FrmChild := TFrmChild.Create(Application); end; … procedure TFrmChild.FormClose(Sender: TObject; var Action: TCloseAction); begin Action:=caFree; // Это уничтожит дочернее окно end; end.

В главной форме где надо вызываешь ActivateFrmChild. Т.е. там, где твой огромный обработчик это разрешит. Также необходимо убрать дочерние окна из списка автосоздаваемых форм. Это значительно экономит ресурсы…

Из конференции Expert_FAQ



Copyright © 2000-2004 Сообщество Чайников
Контактная информация