En los artículos precedentes del programa educativo Academic aprendimos a instalar FastReports en Lazarus, enseñamos a utilizar los gráficos, los diagramas y los códigos de barras y también conectamos un informe a los datos. Ahora necesita examinar los formularios de diálogo.
A menudo tiene que configurar algunos parámetros o transferir los datos antes la representación del informe. Por cierto, puede hacerlo por vía del entorno de programación, pero FastReport tiene sus propias herramientas de desarrollo de los formularios de diálogo. Además de las paginas simples puede utilizar algunos formularios de diálogo en un informe.
Para crear un nuevo formulario sirve el botón en la barra de herramientas del administrador de diseño, añade una nueva página en un informe. Cuando se cambia a una página con el formulario de diálogo, el campo de trabajo del administrador de diseño se cambia — ahora es un formulario donde puede colocar los objetos — elementos de control.
La imagen muestra que modelar un formulario de diálogo se parece a trabajar con los formularios en todo entorno de programación moderno. El formulario de diálogo tiene la marcación especial para facilitar la orientación de los objetos en el.
Los elementos de control
Los objetos del formulario de diálogo son tradicionales para todos los entornos de programación modernos. Para colocar un elemento de control es necesario hacer clic en un objeto, pues en un espacio conveniente en el formulario.
Elemento |
Nombre |
Descripción |
|
TfrxLabelControl |
Este elemento de control destina a representar un título explicativo en el formulario de diálogo. |
|
TfrxEditControl |
El elemento de control destina a escribir una línea de texto desde el teclado. |
|
TfrxMemoControl |
El elemento de control destina a escribir algunas líneas de texto desde el teclado. |
|
TfrxButtonControl |
El elemento de control es un botón. |
|
TfrxCheckBoxControl |
El elemento de control es una casilla de verificación que puede estar en dos estados: activado y desactivado. Un título explicativo aparece cerca de la casilla. |
|
TfrxRadioButtonControl |
El elemento de control es un análogo del botón de radio. Por esta razón no se utiliza solo. |
|
TfrxListBoxControl |
El elemento de control es una lista de las líneas con la posibilidad de elegir una de ellas. |
|
TfrxComboBoxControl |
El elemento de control es una lista despegable de las líneas con la posibilidad de elegir una de ellas. |
|
TfrxPanelControl |
El elemento de control es un panel que sirve para reunir algunos elementos de control. |
|
TfrxGroupBoxControl |
El elemento de control es un panel con el título explicativo que sirve para reunir algunos elementos de control. |
|
TfrxPageControl |
El control le permite combinar varias pestañas que contienen diferentes controles en el mismo formulario durante el proceso de diseño. |
|
TfrxDateEditControl |
El elemento de control es un campo de entrada de fechas con el calendario despegable. |
|
TfrxImageControl |
El elemento de control es una imagen de los formatos BMP, ICO, WMF, EMF. |
|
TfrxBevelControl |
El elemento de control destina a hacer un formulario de diálogo. |
|
TfrxBitBtnControl |
El elemento de control es un botón con una imagen. |
|
TfrxSpeedButtonControl |
El elemento de control es un botón con una imagen. |
|
TfrxMaskEditControl |
El elemento de control es un campo de entrada de información según una trama determinada. |
|
TfrxCheckListBoxControl |
El elemento de control es una lista de líneas con las casillas. |
|
DBLookupComboBox |
El elemento de control es una lista de celdas de la columna determinada en una tabla. |
El informe "Hello, World!" con un formulario de diálogo
Esta vez vamos a crear un informe que representa antes la formación una ventana con un mensaje de salutación por vía del formulario de diálogo. Para esto:
- Creamos un nuevo informe y añadimos un formulario de diálogo en un informe.
- Ponemos los objetos TfrxLabelControl, TfrxButtonControl en un informe.
- Personalizamos las propiedades de los objetos:
TfrxLabelControl: Caption = 'Hello, World!' TfrxButtonControl: Caption = 'OK' Default = True ModalResult = mrOk
Personalizamos la propiedad BorderStyle = bsDialog del formulario propio.
Después de personalizar el formulario de diálogo, volvamos en una página del informe y ponemos el objeto "Texto" en ella con algún texto adentro. Iniciamos el informe a ejecutar y veamos nuestro formulario:
Si hace clic en el botón ОК, el informe se formará y se representará. Si cierra la ventana con el botón Х, el informe no se formará. Así es un algoritmo del funcionamiento del diálogo en FastReport: si hay los formularios de diálogo, el informe sólo se generará si cado formulario se ha cerrado con el botón ОК, es decir ha vuelto ModalResult = mrOk. Por eso hemos establecido la propiedad ModalResult de nuestro botón como mrOk.
La entrada de los parámetros y su carga en un informe
Complicamos nuestro ejemplo para mostrar cómo puede cargar los valores entrados en un formulario de diálogo en el informe. Para eso cambiamos nuestro formulario de la manera siguiente:
En una página del informe ponemos el objeto "Texto" con el contenido siguiente:
You've entered: [Edit1.Text]
Ejecutamos el informe y nos aseguramos de que el parámetro que hemos entrado se muestra bien. De la misma manera puede referirse a otros objetos del formulario de diálogo. Cómo cada objeto tiene el nombre único en todo el informe, se puede utilizar en cualquier parte del documento.
La interacción de los elementos de control
Utilizando el script puede realizar fácilmente el algoritmo del funcionamiento del formulario de diálogo, por ejemplo, la interacción de sus elementos de control. Lo veamos en un ejemplo simple. Modificamos nuestro formulario de la manera siguiente:
Hacemos doble clic en el objeto "CheckBox" – esto crea un controlador de eventos OnClick. Escribimos el código siguiente del script:
PascalScript: | |
1 2 3 4 |
procedure CheckBox1OnClick(Sender: TfrxComponent); begin Button1.Enabled := not CheckBox1.Checked; end; |
C++ Script: | |
1 2 3 4 |
void CheckBox1OnClick(TfrxComponent Sender) { Button1.Enabled = !CheckBox1.Checked; } |
Una vez que el informe se ha iniciado, necesita comprobar cómo reacciona el botón al cambio de estado de la casilla.
Algunos formularios de diálogo
Vamos a ver cómo funciona el informe con dos formularios de diálogo. Creamos un informe con dos diálogos y una pagina:
El primer formulario de diálogo:
El segundo formulario de diálogo:
Personalizamos las propiedades ModalResult (mrOk y mrCancel respectivamente) de los botones OK y Cancel. Luego ejecutamos el informe. Al principio se nos harán preguntas del primero diálogo (el nombre, si hay hijos), luego, si hacemos clic en el botón ОК – del segundo (los nombres de hijos). Después de pulsar el botón OK el informe se formará en el segundo diálogo. Así es cómo funciona el motor FastReport – si hay algunos formularios de diálogo, se muestran en el orden de su formación, y cada diálogo siguiente se mostrará después de que haya pulsado el botón OK en el diálogo precedente (con la propiedad ModalResult = mrOk). Si alguno de los diálogos se cancela (con el botón Cancel o una cruz en la barra de título), la formación del informe se interrumpe.
El control de los formularios del informe
En el ejemplo precedente ambos formularios se presentan independientemente de si marcamos la casilla "Have children" o no. Mostramos cómo ocultar el segundo diálogo si esta casilla no está marcada. Para eso creamos el controlador OnClick del botón ОК en el primer formulario de diálogo (haga doble clic en el botón para crear el controlador):
PascalScript: | |
1 2 3 4 |
procedure Button1OnClick(Sender: TfrxComponent); begin DialogPage2.Visible := CheckBox1.Checked; end; |
C++Script: | |
1 2 3 4 |
void Button1OnClick(TfrxComponent Sender) { DialogPage2.Visible = CheckBox1.Checked; } |
Este código oculta el segundo formulario de diálogo (DialogPage2), si la casilla no está marcada. Si iniciamos el informe a ejecutar, veamos que todo funciona bien.
Otra manera de controlar los formularios es utilizar el evento de informe OnRunDialogs. Para crear el controlador de este evento seleccione el objeto Report en el árbol del informe o en el inspector de objetos y pase al marcador "Eventos" en el inspector. El doble clic en el evento OnRunDialogs crea un controlador necesario.
Escribimos el código siguiente en el controlador:
PascalScript: | |
1 2 3 4 5 6 7 8 9 |
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: | |
1 2 3 4 5 6 7 8 9 |
void frxReport1OnRunDialogs(bool &Result); { Result = DialogPage1.ShowModal == mrOk; if (Result) { if (CheckBox1.Checked) Result = DialogPage2.ShowModal == mrOk; } } |
El controlador funciona de la manera siguiente: mostramos el primer diálogo. Si está cerrado con el botón OK, veamos el estado de la casilla CheckBox1 y mostramos el segundo diálogo, si es necesario. Si el controlador devuelve Result = True, el informe se construye; si Result = False, el informe se interrumpe.