Herramientas Bidireccionales: Sincronizacion Disenador y Codigo

El motor de herramientas bidireccionales de HarbourBuilder asegura que tu diseno visual de formularios y tu codigo fuente esten perfectamente sincronizados. Cada cambio que haces en el Disenador de Formularios visual se refleja inmediatamente en el codigo generado, y cada cambio estructural que haces en el codigo es visible instantaneamente en el disenador.

Tu Logica Esta Segura

El motor de regeneracion de codigo solo actualiza las lineas de definicion de interfaz de usuario (DEFINE, @ POSITION, propiedades). Tus implementaciones de METHOD, manejadores de eventos y logica personalizada nunca se tocan ni se sobrescriben.

Como Funciona

Cuando trabajas en el Disenador de Formularios, cada accion — colocar un control, redimensionar, mover, cambiar una propiedad — activa una regeneracion de codigo especifica. El motor analiza tu archivo fuente existente, identifica las secciones de definicion de interfaz, las actualiza y deja todo lo demas intacto.

Que se Regenera

El motor de codigo identifica y actualiza solo estas categorias:

CategoriaEjemplo¿Regenerado?
Sentencias DEFINEDEFINE FORM, DEFINE BUTTON
Lineas @ POSITION@ 10, 20 BUTTON ...
Asignaciones de propiedades::cTitle := "Hola"
Definiciones CLASSCLASS TForm1 FROM TForm
Creacion de controles via codigoTButton():New()
Implementaciones de METHODMETHOD OnClick() CLASS TForm1No
Cuerpos de manejadores de eventosbAction := { || ... }No
Funciones personalizadasstatic function MiAyudante()No
Comentarios// TODO: ...No

Antes y Despues: Regeneracion de Codigo

Antes: Colocas un boton en el disenador

CLASS TForm1 FROM TForm

   DATA oBtn1

   METHOD CreateForm()
   METHOD OnBtnClic()

ENDCLASS

METHOD CreateForm() CLASS TForm1
   ::cTitle  := "Form1"
   ::nWidth  := 400
   ::nHeight := 300
return nil

METHOD OnBtnClic() CLASS TForm1
   // Tu logica personalizada - PRESERVADA
   MsgInfo( "¡Boton pulsado!" )
return nil

Despues: Codigo regenerado (boton agregado, metodo intacto)

CLASS TForm1 FROM TForm

   DATA oBtn1

   METHOD CreateForm()
   METHOD OnBtnClic()

ENDCLASS

METHOD CreateForm() CLASS TForm1
   ::cTitle  := "Form1"
   ::nWidth  := 400
   ::nHeight := 300

   // --- NUEVO: Boton agregado por el disenador ---
   @ 120, 140 BUTTON ::oBtn1 PROMPT "Boton1" ;
      OF Self SIZE 120, 32 ;
      ACTION ::OnBtnClic()
return nil

METHOD OnBtnClic() CLASS TForm1
   // Tu logica personalizada - PRESERVADA
   MsgInfo( "¡Boton pulsado!" )
return nil
Observa la preservacion

El cuerpo del metodo OnBtnClic permanece completamente intacto. Solo el metodo CreateForm recibio la nueva definicion del boton.

Flujo de Trabajo

  1. Comienza con formulario en blanco — Archivo > Nuevo formulario
  2. Coloca controles desde la paleta — Arrastra controles al lienzo del formulario
  3. Configura propiedades en el Inspector de Objetos — Cambia textos, tamanios, colores
  4. El codigo se autogenera — Cada cambio actualiza el codigo fuente
  5. ¿Necesitas logica personalizada? — Cambia a la vista de codigo
  6. Escribe implementaciones de METHOD — Agrega tu logica de negocio
  7. Vuelve al disenador — Continua el diseno visual; tu logica esta segura

Reglas de Analisis de Codigo

El motor de regeneracion usa estas reglas para identificar secciones seguras de modificar:

  1. Bloques CLASS / ENDCLASS — Las declaraciones DATA y METHOD se actualizan; los cuerpos de METHOD existentes se omiten.
  2. Bloques DEFINE FORM — Las propiedades dentro de los bloques DEFINE se regeneran.
  3. Sentencias @ POSITION — Las clausulas de posicion, tamano y propiedad se actualizan.
  4. Bloques ACTIVATE FORM — Las clausulas de activacion se regeneran.
  5. Todo lo demas — Funciones estaticas, cuerpos de METHOD, comentarios y codigo personalizado se dejan intactos.
Mejor practica

Mantén tu logica personalizada en implementaciones de METHOD separadas o funciones estaticas en lugar de en linea dentro de bloques DEFINE. Esto facilita que el motor de regeneracion identifique y preserve tu codigo.

Manejo de Conflictos

Si editas manualmente una linea que el disenador tambien gestiona (p. ej., cambiar la posicion de un boton en el codigo mientras tambien esta en el lienzo del formulario), la vista del disenador tiene prioridad en la siguiente regeneracion. Para evitar conflictos:

Bidireccional es Confiable

El motor de regeneracion ha sido probado con mas de 200 casos extremos incluyendo bloques DEFINE anidados, multiples formularios en un archivo, sintaxis mixta basada en clases y procedural, y archivos con comentarios extensos.

Alternar Entre Vistas

Usa el boton de la barra de herramientas o el atajo de teclado para alternar entre las vistas Disenador y Codigo:

AtajoAccion
F12Alternar entre vistas Disenador y Codigo
Ctrl+TabCiclar por las pestanas del editor abiertas
Ctrl+SGuardar (datos de diseno y codigo)

En Esta Página

Primeros pasos Paleta de componentes Funciones del IDE Tutoriales Referencia Plataformas Como Funciona Que se Regenera Antes y Despues: Regeneracion de Codigo Antes: Colocas un boton en el disenador Despues: Codigo regenerado (boton agregado, metodo intacto) Flujo de Trabajo Reglas de Analisis de Codigo Manejo de Conflictos Alternar Entre Vistas