Tutorial: Trabajar con Formularios
La mayoria de las aplicaciones del mundo real necesitan mas de una ventana. En este tutorial construira un proyecto con multiples formularios que incluye un formulario principal y un dialogo de configuracion. Aprendera a abrir formularios de forma modal, pasar datos entre ellos y configurar propiedades comunes de formularios.
Paso 1: Configurar el Proyecto
- Cree un nuevo proyecto llamado
MultiFormDemomediante Archivo → Nuevo Proyecto. - El IDE crea
main.prgcon un formulario inicial. - Anadiremos un segundo archivo fuente para el formulario de configuracion en el siguiente paso.
Paso 2: Disenar el Formulario Principal
- Abra
main.prgen el Disenador de Formularios. - Establezca el titulo del formulario a
"Demo Multi-Formulario"y tamano a700, 500. - Anada una Etiqueta en la parte superior para mostrar el nombre de usuario actual — establezca
cValuea"Usuario: (ninguno)". - Anada un Boton con
cPromptestablecido a"Abrir Configuracion".
Su formulario principal se vera asi:
#include "hbbuilder.ch" function Main() local oForm, oLblUser, oBtnSettings DEFINE FORM oForm TITLE "Demo Multi-Formulario" ; SIZE 700, 500 FONT "Segoe UI", 10 @ 30, 50 LABEL oLblUser VALUE "Usuario: (ninguno)" ; OF oForm SIZE 300, 24 @ 80, 50 BUTTON oBtnSettings PROMPT "Abrir Configuracion" ; OF oForm SIZE 140, 36 ; ACTION OpenSettings( oForm, oLblUser ) ACTIVATE FORM oForm CENTERED return nil
Paso 3: Crear el Formulario de Configuracion
- Seleccione Archivo → Nuevo Formulario para anadir un segundo formulario al proyecto. Nombrelolo
settings.prg. - En el Disenador de Formularios para
settings.prg, establezca el titulo a"Configuracion"y tamano a400, 300. - Anada una Etiqueta con
cValue"Su nombre:"en fila 30, columna 30. - Anada un Cuadro de Texto (
TGet) junto a la etiqueta para que el usuario escriba su nombre. - Anada una Casilla de Verificacion debajo con
cPrompt"Activar modo oscuro". - Anada dos botones: "Aceptar" y "Cancelar" en la parte inferior.
Paso 4: Implementar ShowModal y Paso de Datos
La tecnica clave es llamar a ShowModal() en el formulario de configuracion. Esto bloquea el formulario principal hasta que el usuario cierra el dialogo. Despues de que el dialogo modal se cierra, lee los valores que el usuario ingreso.
static function OpenSettings( oMainForm, oLblUser ) local oSettings, oGetName, oChkDark, oBtnOK, oBtnCancel local cName := "", lDark := .F., nResult DEFINE FORM oSettings TITLE "Configuracion" ; SIZE 400, 300 FONT "Segoe UI", 10 ; STYLE "dialog" @ 30, 30 LABEL oLbl VALUE "Su nombre:" ; OF oSettings SIZE 100, 24 @ 30, 140 GET oGetName VAR cName ; OF oSettings SIZE 220, 24 @ 70, 30 CHECKBOX oChkDark VAR lDark ; PROMPT "Activar modo oscuro" ; OF oSettings SIZE 200, 24 @ 220, 180 BUTTON oBtnOK PROMPT "Aceptar" ; OF oSettings SIZE 90, 32 ; ACTION ( oSettings:nModalResult := 1, oSettings:Close() ) @ 220, 280 BUTTON oBtnCancel PROMPT "Cancelar" ; OF oSettings SIZE 90, 32 ; ACTION ( oSettings:nModalResult := 0, oSettings:Close() ) nResult := oSettings:ShowModal( oMainForm ) if nResult == 1 oLblUser:SetValue( "Usuario: " + cName ) if lDark oMainForm:SetDarkMode( .T. ) else oMainForm:SetDarkMode( .F. ) endif endif return nil
Use ShowModal( oParent ) cuando el usuario debe completar el dialogo antes de volver al padre. Use Show() para ventanas no bloqueantes entre las que el usuario puede cambiar libremente.
Paso 5: Referencia de Propiedades del Formulario
Aqui estan las propiedades de formulario mas usadas que puede establecer en el Inspector de Objetos o en codigo:
| Propiedad | Tipo | Descripcion |
|---|---|---|
cTitle |
String | Texto mostrado en la barra de titulo del formulario. |
nWidth / nHeight |
Numerico | Dimensiones del formulario en pixeles. |
lMaximize |
Logico | Si el boton de maximizar esta habilitado. |
lMinimize |
Logico | Si el boton de minimizar esta habilitado. |
lResizable |
Logico | Si el usuario puede redimensionar el formulario. |
cStyle |
String | "normal", "dialog" o "toolwindow". |
nModalResult |
Numerico | Valor de retorno despues de ShowModal(). Establecer antes de llamar a Close(). |
Paso 6: Compilar y Probar
- Presione F9 para compilar y ejecutar.
- Haga clic en "Abrir Configuracion" en el formulario principal — aparece el dialogo de configuracion de forma modal.
- Escriba un nombre, alterne la casilla y haga clic en Aceptar.
- La etiqueta del formulario principal se actualiza para mostrar el nombre que ingreso.
- Abra el dialogo nuevamente y haga clic en Cancelar — el formulario principal permanece sin cambios.
Flujo del Ciclo de Vida del Formulario
ACTIVATE FORM CENTERED"] --> B["Usuario hace clic
Abrir Configuracion"] B --> C["Formulario Configuracion
ShowModal( oMainForm )"] C --> D{"Accion del usuario"} D -->|"Aceptar"| E["nModalResult = 1
Close()"] D -->|"Cancelar"| F["nModalResult = 0
Close()"] E --> G["Formulario principal lee
cName y lDark"] F --> H["Formulario principal ignora
valores del dialogo"] style A fill:#58a6ff,stroke:#388bfd,color:#0d1117 style C fill:#d2a8ff,stroke:#bc8cff,color:#0d1117 style E fill:#3fb950,stroke:#2ea043,color:#0d1117 style F fill:#f0883e,stroke:#d18616,color:#0d1117
Ahora que puede trabajar con multiples formularios, continue al tutorial de Manejo de Eventos para aprender sobre todos los tipos de eventos disponibles en HarbourBuilder.