Tutorial BBjGrid (parte 1)

Uso de BBjGrid para crear un control Grid

Uno de los controles más interesantes de dominar en BBj, es sin duda el BBjGrid. Quienes hayan trabajado con Grids en Visual Pro/5 usando la sintaxis existente, o haya hecho uso de las librerías GML para mejorar su funcionalidad, entonces agradecerá la nueva sintaxis de objetos del BBjGrid.

Este es el procedimiento sugerido para usar el control BBjGrid con métodos:

1. Crear un control Grid usando BBjWindow::addGrid

2. Definir varios atributos de la grid usando los métodos de BBjGrid

3. Establecer el texto de la celda usando BBjGrid::setCellText(fila,columna,texto) o setCellText(BBjVector) usando el objeto BBjVector. Si los datos tienen una extensión de filas y/o columnas, establecer el texto de las celdas en respuesta al evento de actualización de tabla puede ser aún más rápido dado que no tiene que inicializar los datos de todas las celdas a la vez. Usar setCellText(BBjVector) es más rápido que setCellText(fila,columna,texto) debido a que se necesita llamar menos métodos.

4. Use BBjGrid::setUpdateCached(FALSO) para activar la opción de no enviar la notificación de eventos 22 cuando la celda ya contiene datos. Esto reduce el número de eventos “actualización de tabla” que se envían desde la Grid.

5. Establezca el “modo edición” de la Grid usando BBjGrid::setGridEditable. Si la edición se quiere hacer en todas las celdas, no se necesita nada más.

6. Establezca la opción de “Drag a Drop” (tomar y arrastrar) si desea usando BBjGrid::setDragAccept.

7. Muestre la grid

8. Registre los callbacks para manejar los eventos o use read record para leer los eventos. Aunque este tutorial usa callback por sus ventajas indiscutibles. No se requiere manejo de eventos para administrar los datos, ni editarlos o tomarlos y arrastrarlos cuando se está usando la grid. Aunque, están soportados todos los eventos regulares y las notificaciones.

Los siguientes pasos crean una grid que despliega información del clima para una semana.

La grid será editable si el check box que aparece en la zona superior del formulario está marcado y la edición comenzará cuando se pulse doble click sobre la celda escogida.

Paso 9: Define la ventana. Como ya lo aprendiste en los primeros pasos de BBj, tu programa que define el formulario debe tener este aspecto inicial:

rem "[PRG01] Usando un BBjGrid con sintaxis de objetos

rem

rem "Obtiene una instancia del objeto BBjAPI

rem "=======================================

LET miAPI!=BBjAPI()

rem

rem "Abre el dispositivo SYSGUI

rem "==========================

SYSGUI=UNT

OPEN (SYSGUI) "X0"

rem

rem "Obtiene la instancia del objeto BBjSysGui

rem "=========================================

LET sysgui!=miAPI!.getSysGui()

rem

rem "Valores para crear una ventana

rem "==============================

X=10

Y=10

ANCHO=700

ALTO=500

TITULO$="Formulario que usa BBjGrid"

rem

rem "Establece el contexto actual

rem "============================

sysgui!.setContext(0)

rem

rem "Crea la ventana

rem "===============

window! = sysgui!.addWindow(X,Y,ANCHO,ALTO,TITULO$)

escape

Paso 10: A continuación crea otros controles importantes de nuestro ejemplo:

window!.addStaticText(101,10,05,150,25,"Pronostico del tiempo",$0000$)

window!.addStaticText(102,160,10,200,25,"Temperatura en grados Fahrenheit",$0000$)

editable! = window!.addCheckBox(103,450,05,100,25,"Grid Editable",$0000$)

Paso 11. Crea el control Grid básico con el método correspondiente:

numfil=7

numcol=9

miGrid!=window!.addGrid(104,20,30,544,230,$8856$,numfil,numcol)

Paso 12. Establece algunos atributos de la Grid:

miGrid!.setFitToGrid(1)

miGrid!.setRowHeaderWidth(100)

miGrid!.setRowHeight(20)

miGrid!.setVisible(1)

Paso 13. A continuación definimos los títulos de encabezado usando la sintaxis de objetos. Para ello creamos un BBjVector para agregar los encabezados:

rem "Establece encabezados de columnas

rem "=================================

vector!=sysgui!.makeVector()

vector!.add("8 AM")

vector!.add("9 AM")

vector!.add("10 AM")

vector!.add("11 AM")

vector!.add("12 PM")

vector!.add("1 PM")

vector!.add("2 PM")

vector!.add("3 PM")

vector!.add("Lluvia")

miGrid!.setColumnHeaderText(vector!)

Paso 14. Lo mismo con los encabezados de filas, para lo cual aprovechamos el mismo vector de títulos al que le aplicamos una inicialización para reutilizar:

rem

rem "Establece encabezado de filas

rem "=============================

vector!.clear()

vector!.add("Domingo")

vector!.add("Lunes")

vector!.add("Martes")

vector!.add("Miercoles")

vector!.add("Jueves")

vector!.add("Viernes")

vector!.add("Sabado")

miGrid!.setRowHeaderText(vector!)

Paso 15. Definimos el estilo de la última columna:

miGrid!.setColumnStyle(8, sysgui!.GRID_STYLE_UNCHECKED)

Paso 16. Establecemos algunas celdas individuales como chequeadas:

rem

rem "Establece algunas celdas chequeadas

rem "===================================

miGrid!.setCellStyle(1,8,sysgui!. GRID_STYLE_CHECKED)

miGrid!.setCellStyle(4,8,sysgui!. GRID_STYLE_CHECKED)

Paso 17. Establece los colores de las columnas. Los objetos color se generan usando BBjSysGui::makeColor. (Aprovecha de notar la sintaxis multilínea de la construcción IF..THEN..ELSE..ENDIF)

rem

rem "establece colores de las columnas

rem "=================================

for col=0 to 8

if col<3 then

let color!=sysgui!.makeColor("green")

else

if col<6 then

let color!=sysgui!.makeColor("yellow")

else

if col<8 then

let color!=sysgui!.makeColor(255,50,50)

else

let color!=sysgui!.makeColor("blue")

endif

endif

endif

miGrid!.setColumnBackColor(col,color!)

next col

Paso 18. Ahora colocamos texto en las celdas de la Grid usando BBjGrid::setCellText(BBjVector)

rem "Establece el texto en las celdas usando setCellText(BBjVector)

rem "Primero se llena el vector. Se cargan los datos en las filas partiendo

rem "desde la fila 0, columna 0 for as many strings are in the BBjVector

vector!.clear()

for fila=0 to 6

for col=0 to 8

if col = 8

buff$=""; REM “la ultima columna sin texto

else

buff$=str(50+fila+col)

endif

vector!.add(buff$)

next col

next fila

miGrid!.setCellText(vector!)

Paso 19. Establece propiedades de la grid

miGrid!.setUpdateCached(0)

gosub deja_editable

rem

rem "establece la propiedad de tomar y arrastrar

miGrid!.setDragAccept(1)

Siguiente Página