Referencia de Comandos xBase
HarbourBuilder usa las directivas de preprocesador #xcommand y #translate de Harbour para
proporcionar una sintaxis estilo xBase/Clipper familiar para crear y configurar controles. Estos comandos
estan definidos en hbbuilder.ch y se expanden en tiempo de compilacion a llamadas de metodos OOP de Harbour.
Cuando escribes DEFINE FORM oForm TITLE "Mi App", el preprocesador de Harbour lo transforma en
codigo OOP de Harbour que crea un objeto TForm y establece sus propiedades. Esto ocurre en
tiempo de compilacion. Puedes usar cualquiera de los dos estilos; los comandos son simplemente una abreviatura mas legible.
Arquitectura de Expansion de Comandos
Cuando escribes comandos xBase, el preprocesador de Harbour los traduce a llamadas OOP:
--- Estilo de comando xBase --- local oForm DEFINE FORM oForm TITLE "Ventana Principal" ; SIZE 800, 600 FONT "Segoe UI", 10 ON INIT oForm MsgInfo( "Formulario inicializado" ) ACTIVATE FORM oForm CENTERED --- Lo que el preprocesador genera (equivalente OOP) --- oForm := TForm():New( nil ) oForm:cTitle := "Ventana Principal" oForm:nWidth := 800 oForm:nHeight := 600 oForm:SetFont( "Segoe UI", 10 ) oForm:OnInit := { || MsgInfo( "Formulario inicializado" ) } oForm:lCentered := .T. MsgRun( oForm ) /// activa y entra en bucle de eventos
Comandos de Formulario
| Comando | Sintaxis | Descripcion |
|---|---|---|
DEFINE FORM | DEFINE FORM <oForm> [TITLE <cTitle>] [SIZE <nW>, <nH>] [FONT <cFont>, <nSize>] | Crea una nueva ventana de formulario con titulo, tamano y fuente opcionales. |
ACTIVATE FORM | ACTIVATE FORM <oForm> [CENTERED] [MAXIMIZED] [MODAL] | Muestra el formulario e inicia el bucle de eventos. Bloquea hasta que se cierra el formulario. |
ON INIT | ON INIT <oForm> <codigo> | Asigna un bloque de codigo de inicializacion al evento OnInit del formulario. |
ON CLOSE | ON CLOSE <oForm> <codigo> | Asigna un bloque de codigo de limpieza al evento OnClose del formulario. |
Comandos de Creacion de Controles (@ row, col)
La sintaxis clasica estilo Clipper @ row, col crea controles en coordenadas especificas dentro de un contenedor padre:
| Comando | Sintaxis | Descripcion |
|---|---|---|
@ ... BUTTON | @ <row>, <col> BUTTON <oBtn> PROMPT <cCaption> OF <oParent> [SIZE <nW>, <nH>] [ACTION <codigo>] | Crea un boton de pulsacion en la posicion especificada. |
@ ... LABEL | @ <row>, <col> LABEL <oLbl> VALUE <cText> OF <oParent> [SIZE <nW>, <nH>] | Crea una etiqueta de texto estatico. |
@ ... EDIT | @ <row>, <col> EDIT <oEdt> [VALUE <cText>] OF <oParent> [SIZE <nW>, <nH>] | Crea un campo de entrada de texto de una sola linea. |
@ ... COMBOBOX | @ <row>, <col> COMBOBOX <oCbo> ITEMS <aItems> OF <oParent> [SIZE <nW>, <nH>] | Crea un cuadro combinado desplegable. |
@ ... LISTBOX | @ <row>, <col> LISTBOX <oLbx> ITEMS <aItems> OF <oParent> [SIZE <nW>, <nH>] | Crea un control de cuadro de lista. |
@ ... CHECKBOX | @ <row>, <col> CHECKBOX <oChk> PROMPT <cCaption> OF <oParent> [SIZE <nW>, <nH>] | Crea una casilla de verificacion. |
@ ... GROUPBOX | @ <row>, <col> GROUPBOX <oGrp> PROMPT <cCaption> OF <oParent> [SIZE <nW>, <nH>] | Crea un cuadro de grupo (contenedor enmarcado con titulo). |
@ ... MEMO | @ <row>, <col> MEMO <oMemo> [VALUE <cText>] OF <oParent> [SIZE <nW>, <nH>] | Crea un control de edicion de texto multi-linea. |
@ ... IMAGE | @ <row>, <col> IMAGE <oImg> PICTURE <cFile> OF <oParent> [SIZE <nW>, <nH>] | Crea un control de visualizacion de imagen. |
@ ... TIMER | @ <row>, <col> TIMER <oTmr> INTERVAL <nMs> OF <oParent> [ACTION <codigo>] | Crea un control de temporizador (no visual). |
Comandos de Modificadores de Propiedad
Estos comandos se pueden agregar a cualquier definicion de control para establecer propiedades adicionales:
| Modificador | Sintaxis | Descripcion |
|---|---|---|
SIZE | SIZE <nWidth>, <nHeight> | Establece el ancho y alto del control en pixeles. |
FONT | FONT <cName>, <nSize> [BOLD] [ITALIC] | Establece la fuente del control con modificadores de estilo opcionales. |
COLOR | COLOR <nFore> [, <nBack>] | Establece el color de primer plano y fondo opcional. |
VISIBLE | VISIBLE <lVisible> | Establece la visibilidad inicial (.T. / .F.). |
ENABLED | ENABLED <lEnabled> | Establece el estado de habilitacion inicial (.T. / .F.). |
VALUE | VALUE <xValue> | Establece el valor inicial (texto para Edit, estado de marcado para CheckBox, etc.). |
PROMPT | PROMPT <cCaption> | Establece el texto de etiqueta/titulo. |
OF | OF <oParent> | Especifica el contenedor padre (requerido para todos los controles excepto DEFINE FORM). |
ACTION | ACTION <codigo> | Asigna un bloque de codigo al evento predeterminado del control (OnClick para botones, OnChange para ediciones). |
ITEMS | ITEMS <aArray> | Establece la lista de elementos para ListBox, ComboBox y controles similares. |
INTERVAL | INTERVAL <nMs> | Establece el intervalo del temporizador en milisegundos. |
Comandos de Dialogo
| Comando | Sintaxis | Descripcion |
|---|---|---|
MsgInfo() | MsgInfo( <cMensaje> [, <cTitulo> ] ) | Muestra un cuadro de mensaje de informacion. |
MsgStop() | MsgStop( <cMensaje> [, <cTitulo> ] ) | Muestra un cuadro de mensaje de error/parada. |
MsgYesNo() | MsgYesNo( <cMensaje> [, <cTitulo> ] ) → nRespuesta | Muestra un dialogo Si/No. Retorna 6 (Si) o 7 (No). |
MsgYesNoCancel() | MsgYesNoCancel( <cMensaje> [, <cTitulo> ] ) → nRespuesta | Muestra un dialogo Si/No/Cancelar. Retorna 6 (Si), 7 (No), o 2 (Cancelar). |
MsgRun() | MsgRun( <oForm> ) | Activa un formulario y entra en el bucle de eventos. Equivalente a ACTIVATE FORM. |
Ambos estilos estan soportados completamente. Los comandos xBase son mas concisos y familiares para desarrolladores Clipper/xBase. El estilo OOP te da un control mas preciso y es preferido para creacion dinamica de controles en tiempo de ejecucion. El Disenador de Formularios genera comandos xBase por defecto, pero puedes cambiar a codigo estilo OOP en cualquier momento — el analizador bidireccional comprende ambos.