Managing dialogue forms

Top  Previous  Next

In the previous example the second dialogue is displayed irrespective of whether "Have children" was checked. Let's show how to hide the second dialogue when this flag is unchecked. Create an “OnClick” handler for the ОК button on the first dialogue (double-click on the button to create the handler):

 

PascalScript:

 

procedure Button1OnClick(Sender: TfrxComponent);

begin

 DialogPage2.Visible := CheckBox1.Checked;

end;

 

C++Script:

 

void Button1OnClick(TfrxComponent Sender)

{

 DialogPage2.Visible = CheckBox1.Checked;

}

 

This code hides the second dialogue (DialogPage2) if the flag is not checked. Preview the report to see that this works correctly.

 

Another way of managing the forms is to use the “OnRunDialogs” report event. To create this event handler select the Report object in the report tree or object inspector and switch to the “Events” tab in the object inspector. Double-click on the “OnRunDialogs” event to create a handler:

 

clip0260

 

Write the following code in the handler:

 

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;

 }

}

 

The handler works like this : the first dialogue is shown : if it is closed via the ОК button then look at the state of CheckBox1 : if this state is Checked then show the second dialogue : if the second dialogue is closed via the ОК button then set Result to True. If the handler returns Result = True then the preview is built : if Result = False then the report stops running without building a preview.