Referencia de Eventos A-Z
Esta pagina documenta cada evento disponible en HarbourBuilder. Los eventos son bloques de codigo asignados
a propiedades del control que se invocan cuando se dispara el evento correspondiente a nivel del SO. Los eventos forman
el nucleo del modelo de programacion reactiva de HarbourBuilder.
Como funcionan los eventos
Cada evento es una propiedad en un objeto de control. Asignas un bloque de codigo Harbour
({ || ... }) a él. Cuando el usuario interactua con el control, HarbourBuilder enruta
el evento nativo del SO a traves del backend (Win32/Cocoa/GTK3) y evalua tu bloque de codigo.
Sintaxis de Asignacion de Eventos
Los eventos se asignan usando el operador de asignacion estandar de Harbour con un bloque de codigo:
--- Evento simple: mostrar un mensaje ---
oBtn:OnClick := { || MsgInfo( "¡Boton pulsado!" ) }
--- Evento llamando a una funcion ---
oBtn:OnClick := { || ProcesarClic( oBtn, oForm ) }
--- Evento con parametros (eventos de teclado) ---
oEdit:OnKeyDown := { | nKey, nFlags | ManejarTecla( nKey, nFlags ) }
--- Evento con coordenadas del raton ---
oPaintBox:OnMouseMove := { | nX, nY | RastrearRaton( nX, nY ) }
--- Bloque de codigo multi-sentencia ---
oBtn:OnClick := { || ;
RegistrarAccion( "boton pulsado" ), ;
MsgInfo( "¡Listo!" ), ;
oForm:Close() ;
}
Eventos asignados por el disenador
En el Disenador de Formularios, selecciona un control, ve a la pestana Eventos en el Inspector de Objetos,
y haz doble clic en un evento. El IDE genera el bloque de codigo y salta al editor de codigo.
Eventos del Raton
| Evento | Parametros | Controles Disponibles | Descripcion |
OnClick | ninguno | Todos los controles interactivos | Se dispara cuando el usuario hace clic con el boton izquierdo del raton. Es el evento mas comunmente usado para botones, elementos de lista y nodos de arbol. |
OnDblClick | ninguno | Todos los controles interactivos | Se dispara en un doble clic. Para controles de lista/cuadricula, esto a menudo desencadena una accion de "editar" o "abrir". |
OnMouseDown | nButton, nShiftState, nX, nY | Todos los controles visuales | Se dispara cuando se presiona cualquier boton del raton. nButton: 1=izquierdo, 2=derecho, 3=central. |
OnMouseUp | nButton, nShiftState, nX, nY | Todos los controles visuales | Se dispara cuando se suelta cualquier boton del raton. Util para completar arrastrar y soltar o medir duracion de clic. |
OnMouseMove | nX, nY | Todos los controles visuales | Se dispara continuamente mientras el raton se mueve sobre el control. Usar con moderacion; se dispara muy frecuentemente. |
OnMouseWheel | nDelta, nX, nY | Todos los controles visuales | Se dispara cuando se desplaza la rueda del raton. nDelta es positivo para desplazamiento adelante, negativo para atras. |
Eventos del Teclado
| Evento | Parametros | Controles Disponibles | Descripcion |
OnKeyDown | nKey, nFlags | Todos los controles enfocables | Se dispara cuando se presiona una tecla. nKey es el codigo de tecla virtual (constantes VK_). Se dispara antes de que se procese el caracter. |
OnKeyUp | nKey, nFlags | Todos los controles enfocables | Se dispara cuando se suelta una tecla. Util para detectar cuanto tiempo se mantuvo una tecla. |
OnKeyPress | cKey | Edit, Memo, MaskEdit, ComboBox | Se dispara cuando se escribe un caracter. cKey es el caracter actual (no codigo virtual). Permite modificar o cancelar el caracter. |
Eventos de Foco y Seleccion
| Evento | Parametros | Controles Disponibles | Descripcion |
OnEnter | ninguno | Todos los controles enfocables | Se dispara cuando el control recibe foco de entrada (via Tab, clic o programaticamente). Util para resaltar el campo activo. |
OnExit | ninguno | Todos los controles enfocables | Se dispara cuando el control pierde el foco. Usar para validacion: verifica el valor del campo y previene la perdida de foco retornando .F. si es invalido. |
OnChange | ninguno | Edit, Memo, ComboBox, CheckBox, Radio, TrackBar, UpDown | Se dispara cuando el valor del control cambia. Para controles de edicion, se dispara en cada pulsacion de tecla. |
| Evento | Parametros | Controles Disponibles | Descripcion |
OnCreate | ninguno | Form | Se dispara cuando el objeto formulario se crea por primera vez, antes de agregar controles. Usar para inicializacion temprana. |
OnInit | ninguno | Form | Se dispara despues de crear todos los controles y el formulario esta a punto de mostrarse. Ideal para configuracion final. |
OnShow | ninguno | Form | Se dispara cada vez que el formulario se hace visible. |
OnHide | ninguno | Form | Se dispara cuando el formulario se oculta. |
OnActivate | ninguno | Form | Se dispara cuando el formulario recibe foco (se convierte en la ventana activa). |
OnCloseQuery | @lCanClose | Form | Se dispara antes de cerrar el formulario. Establece lCanClose a .F. para cancelar el cierre. Usar para prompts "¿Guardar cambios?". |
OnClose | ninguno | Form | Se dispara cuando el formulario se esta cerrando. Usar para limpieza: cerrar conexiones de base de datos, guardar estado, liberar recursos. |
OnDestroy | ninguno | Form, todos los controles | Se dispara cuando el control/formulario se esta destruyendo. Ultima oportunidad para limpieza. |
Eventos de Temporizador
| Evento | Parametros | Controles Disponibles | Descripcion |
OnTimer | ninguno | Timer | Se dispara a intervalos regulares establecidos por la propiedad nInterval del Timer (en milisegundos). Usar para tareas periodicas: actualizar un reloj, sondear un servidor, animar, guardado automatico. |
Eventos de Dibujo y Redimension
| Evento | Parametros | Controles Disponibles | Descripcion |
OnPaint | ninguno | PaintBox, Form, Panel, Shape, todos los visuales | Se dispara cuando el control necesita redibujarse. Usar con PaintBox para dibujo personalizado GDI/Cairo. |
OnResize | nNewWidth, nNewHeight | Form, Panel, ScrollBox | Se dispara cuando el contenedor se redimensiona. Los parametros proporcionan las nuevas dimensiones. |
Resumen Completo de Eventos
| Evento | Categoria | Controles Principales |
OnClick | Raton | Button, ListBox, TreeView, MenuItem, Image |
OnDblClick | Raton | ListBox, TreeView, StringGrid, Form |
OnMouseDown | Raton | Todos los controles visuales |
OnMouseUp | Raton | Todos los controles visuales |
OnMouseMove | Raton | Todos los controles visuales |
OnMouseWheel | Raton | Todos los controles visuales |
OnKeyDown | Teclado | Todos los controles enfocables |
OnKeyUp | Teclado | Todos los controles enfocables |
OnKeyPress | Teclado | Edit, Memo, MaskEdit, ComboBox |
OnChange | Valor | Edit, Memo, ComboBox, CheckBox, TrackBar |
OnEnter | Foco | Todos los controles enfocables |
OnExit | Foco | Todos los controles enfocables |
OnCreate | Ciclo de vida | Form |
OnInit | Ciclo de vida | Form |
OnShow | Ciclo de vida | Form |
OnHide | Ciclo de vida | Form |
OnActivate | Ciclo de vida | Form |
OnCloseQuery | Ciclo de vida | Form |
OnClose | Ciclo de vida | Form |
OnDestroy | Ciclo de vida | Todos los controles |
OnTimer | Temporizador | Timer |
OnPaint | Dibujo | PaintBox, Shape, Form, Panel |
OnResize | Diseno | Form, Panel, ScrollBox |
Orden de disparo de eventos
Cuando un usuario hace clic en un boton, el orden de eventos es: OnMouseDown -> OnMouseUp -> OnClick.
Para entrada de teclado: OnKeyDown -> OnKeyPress -> OnKeyUp.
Comprender este orden te ayuda a elegir el evento correcto para tu caso de uso.