Управление формами отчета

 В предыдущем примере обе формы диалога показываются независимо от того, отметили мы галочку "Have children" или нет. Покажем, как скрыть второй диалог в случае, если этот флажок снят. Для этого создадим обработчик OnClick у кнопки ОК на первой форме диалога (сделайте двойной щелчок на кнопке, чтобы создать обработчик):

 

PascalScript:

 

procedure Button1OnClick(Sender: TfrxComponent);

begin

 DialogPage2.Visible := CheckBox1.Checked;

end;

 

C++Script:

 

void Button1OnClick(TfrxComponent Sender)

{

 DialogPage2.Visible = CheckBox1.Checked;

}

 

 Этот код скрывает вторую диалоговую форму (DialogPage2), если флажок не отмечен. Если запустить отчет на исполнение, мы увидим, что все работает как надо.

 

 Другой способ управления формами заключается в использовании события отчета OnRunDialogs. Для создания обработчика этого события выберите объект Report в дереве отчета или в инспекторе объектов, и переключитесь на закладку "События" в инспекторе. Двойной щелчок на событии OnRunDialogs создаст нужный обработчик:

 

clip0230

 

 В обработчике напишем следующий код:

 

PascalScript:

 

procedure frxReport1OnRunDialogs(var Result: Boolean);

begin

 Result := DialogPage1.ShowModal = mrOk;

if Result then

begin

  if CheckBox1.Checked then

     Result := DialogPage2.ShowModal = mrOk;

end;

end;

 

C++Script:

 

void frxReport1OnRunDialogs(bool &Result);

{

 Result = DialogPage1.ShowModal == mrOk;

if (Result)

 {

  if (CheckBox1.Checked)

     Result = DialogPage2.ShowModal == mrOk;

 }

}

 Обработчик работает следующим образом: мы показываем первый диалог. Если он был закрыт кнопкой ОК, смотрим состояние флажка CheckBox1 и показываем второй диалог, если нужно. Если обработчик возвращает Result = True, отчет строится; если Result = False, отчет останавливается.