tCAbreBrow

Muestra un browse para navegar por un archivo DBF, matriz, hash u objeto tArray.

Hija de
tWBrowse

Variables
Por herencia tiene las variables de la clase tWBrowse
bSeek Codeblock usado para la busqueda incremental
cSeek Valor que se está buscando en la busqueda incremental (solo lectura)
lMatriz Indica si el browse trabaja en una matriz o hasho (.t.) o un dbf (.f.), es similar a usar ::cAlias == "ARRAY"
lOk Variable que ayuda a saber como se cierra la ventana contenedora, principalmente utilizado en un diálogo cuando se tiene botón de aceptar y cerrar, o cuando se utiliza un diálogo que se cierra con doble click en algún registro.
lSeekEOF Solo aplica en busquedas donde la llave del índice es una cadena de caracteres, si es falso y no encuentra el registro, detiene la busqueda, si es verdadero permite seguir buscando hasta llegar al final del archivo
oMsgRecNo Objeto donde se mostrará el número del registro donde se encuentra el apuntador y el total de registros, el número del apuntador depende de si tiene índice (ordKeyNo()) o no (recNo())
oSeek Objeto donde se mostrará lo que se va tecleando para la busqueda incremental
oClase contiene una copia del objeto generador si es que lo tiene (mAbreBro,dAbreBro,cAbreBro), es importante no modificar el contenido de esta variable, porque puede causar problemas inesperados
nLineHeight Alto del renglón para los registros del browse
nIndex Número del índice utilizado, no es el índice de acuerdo a los índices abiertos, sino el número del índice de acuerdo al control que se lleva por el programa para esta situación, por lo general lo maneja la ventana contenedora que generalmente es de la familia tWAbreBrow
bTextColor Codeblock utilizado para el color del texto del browse
bBkColor Codeblock utilizado para el color del fondo de las celdas del browse
nFreeze Número de columnas que se quedan congeladas a la izquierda
nLineas Número de lineas usados por cada registro del browse
lTransparent Celdas transparentes
lDrawHeaders Indica si se muestran encabezados para las columnas del browse
aHJustify Matriz con valores para la alineación (justificación) de cada encabezado
nHeaderHeight Alto del renglón para los encabezados de columna
nHLineas Numero de líneas usado para mostrar los encabezados de columna
aFooters Matriz o codeblock que devuelve una matriz con los pies de columna del browse
lDrawFooters Indica si se muestran los pies de columna del browse
aFJustify Matriz con valores para la alineación (justificación) de cada pie de columna
nClrFBack Color para el fondo de las celdas de pie de columna
nClrFFore Color para el texto de pie de columna
nFooterHeight Alto del renglón para los pies de columna
nFLineas Numero de líneas usado para mostrar los pies de columna

Métodos
Por herencia tiene los métodos de la clase tWBrowse
new() Constructor desde código fuente
redefine() Constructor desde recurso
seek() Metodo utilizado para la busqueda incremental
setSeeked() Asigna el valor al buffer de busqueda (::cSeek) y refresca el objeto que lo muestra (::oSeek)
record() Actualiza el objeto que muestra la posición del apuntador y total de registros (::oMsgRecNo)
setArray() Configura el browse para utilizar una matriz, hash u objeto tArray en lugar de un archivo DBF
setLine() Cambia ::bLine y configura las variables necesarias para que no marque error
nHHeight() Tamaño total del alto del encabezado
nFHeight() Tamaño total del alto de los pies de columna
nWRow() Indica a que renglón del browse pertenece el punto indicado
lDblClick() Evento que se dispara al hacer doble click en un registro del browse
drawHead() Pinta los encabezados de columna
drawFoot() Pinta los pies de página
lEditCol() Método lEditCol de tWbrowse con la difrencia de poner un bitmap como botón dentro del GET y teclá rápida para accionar el botón del bitmap
meter() Pone un meter dentro de una celda
unirCeldas() Indica las celdas que se unen para los renglones del browse
unirHead() Indica las celdas que se unen para los encabezados de columna
unirFoot() Indica las celdas que se unen para los pies de columna

Descripción
Browse heredado de tWBrowse con soporte para:
   1. Congelar columnas de la izquierda (freze)
   2. Centrar el contenido de las celdas, no solo izquierda y derecha
   3. Dispara el evento doble click sobre el registro actual la presionar la tecla enter
   4. Pie de columnas
   5. Utilizar mas de un renglón para mostrar los registros, encabezados y pie de página.
   6. Definir el tamaño de forma independiente para encabezados, registros y pie de página.
   7. Poder utilizar encabezados y pies de página con más de un renglón tipo registro, esto es difrente al punto 3, porque en este punto sería como si fueran 2 o más encabezados o pies de página, o sea, serían dos celdas para un encabezado, en el punto 3 es una celda con varios renglones.
   8. Busqueda incremental sobre un índice
   9. Combinar celdas, tanto en ecabezados, como en pies de página o registros del browse.
   10. Manejar un meter dentro de una celda, como la captura de ::lEditCol()
   11. Personalizar la captura para ::lEdit()

Los métodos modificados heredados de la clase tWBrowse reciben los mismos parámetros que la clase padre, y cuando reciben alguno adicional, siempre van despues de los de la clase tWBrowse, esto con la finalidad de que si se quiere cambiar el uso de la clase tWBrowse por tCAbreBrow simplemente hay que cabiar tWBrowse() por tCAbreBrowe(), todo lo demas solo necesitará cambios al momento de agregar las nuevas funcionalidades, inclusive, para migrar usando los comandos de fivewin, lo único que hay que hacer es cambiar LISTBOX por CONTROL BROWSE en el comando.

Busqueda incremental
La busqueda incremental del browse permite realizar busquedas simplemente tecleando la llave del registro que se quiere buscar, acepta cualquier tipo de dato, númerico, lógico, fecha o caracter, aunque para sacar el provecho de esta busqueda solamente funcionan númerico y caracter, porque campos lógicos solamente hay dos valores, y fechas hay que teclearla completa para que localice el registro.

Para realizar la busqueda, simplemente hay que teclear lo que se quiere buscar cuando se tiene el foco sobre el browse, para borrar el último caracter tecleado se oprime la tecla de retroceso (backspace), para borrar todo lo tecleado, se puede borrar caracter por caracter o presionar la combinación de control y retroceso (ctrl + backspace).

Colores
Se puede asignar el color a cada renglón completo o celda por celda, tanto de registros, como encabezados y pies de páginas, las variables de instancia para cada color, tanto de texto, como de fondo, de registros, encabezados o pies de página pueden ser el número RGB que indica el color para todo el renglón o un codeblock que se evalúa para cada celda, el codeblock recibe dos parametros:
   1. El número de la columna
   2. Una matriz con los valores del registro.

Alineación del contenido de las columnas (incluidos encabezados y pies de página)
Se puede indicar la alineación para cada columna, tanto para los registros del browse, como para los encabezados y pies de página se pueden indicar de dos maneras:
   1. Como la clase tWBrowse
      .t. - Alineación a la derecha
      .f. - Alineación a la izquierda
   2. Colo en tXBrowse (xBrowse.ch)
      0 - AL_LEFT
      1 - AL_RIGHT
      2 - AL_CENTER

Métodos

new( nRow, nCol, nWidth, nHeigth, bLine, aHeaders, aColSizes, oWnd, cField, uVal1, uVal2, bChange, bLDblClick, bRClick, oFont, oCursor, nClrFore, nForeBack, cMsg, lUpdate, cAlias, lPixel, bWhen, lDesign, bValid, bLClick, aActions, bBuscar, lEOF )
Este método crea un browse sobre la ventana desde código fuente.
Devuelve: Una referencia al objeto.
nRow a aActions Son los mismos parámetros de la clase tWBrowse
bBuscar Codeblock utilizado para la busqueda incremental, si no se envía, utiliza la busqueda predefinida, el codeblock recibe dos parámetros:
   xSeek - Valor que se va a buscar
   nIndex - Número de índice activo, corresponde a los índices registrados del browse (::nIndex)
Devuevle: El valor que se buscara
Ejemplo: { | xSeek, nIndex | if( nIndex == 1, upper( xSeek ), xSeek ) }
lEOF Indica si detiene la busqueda si no se encuentra el registro (.t.) o si permite seguir buscando hasta final de archivo (.f.), si no se envía, continúa la busqueda hasta final de archivo

redefine( nId, bLine, oDlg, aHeaders, aColSizes, cField, uVal1, uVal2, bChange, bLDblClick, bRClick, oFont, oCursor, nClrFore, nClrBack, cMsg, lUpdate, cAlias, bWhen, bValid, bLClick, aActions, bBuscar, lEOF)
Este método crea un botón sobre la barra de botones desde código fuente.
Devuelve: Una referencia al objeto.
nId a aActions Son los mismos parámetros de la clase tWBrowse
bBuscar Codeblock utilizado para la busqueda incremental, si no se envía, utiliza la busqueda predefinida, el codeblock recibe dos parámetros:
   xSeek - Valor que se va a buscar
   nIndex - Número de índice activo, corresponde a los índices registrados del browse (::nIndex)
Devuevle: El valor que se buscara
Ejemplo: { | xSeek, nIndex | if( nIndex == 1, upper( xSeek ), xSeek ) }
lEOF Indica si detiene la busqueda si no se encuentra el registro (.t.) o si permite seguir buscando hasta final de archivo (.f.), si no se envía, continúa la busqueda hasta final de archivo

seek( cKey )
Realiza la busqueda incremental sobre el índice activo del browse
Devuelve: Valor lógico que indica si se encontró el registro buscado.
cSeek Caracter que se agregará al valor buscado (::cSeek + cKey)

setSeeked( cSeek )
Asigna el valor al buffer de busqueda (::cSeek) y refresca el objeto que lo muestra (::oSeek).
NOTA: No realiza busqueda, simplemente asigna un valor al ::cSeek, si se quiere realizar una busqueda se debe usar ::seek()
Devuelve: El nuevo valor asignado.
cSeek Valor que se asigna a ::cSeek

record()
Actualiza el objeto que muestra la posición del apuntador y total de registros (::oMsgRecNo).
Devuelve: NIL

setArray( xArray, lBLine )
Asigna una matriz, hash u objeto tArray para ser mostrado en el browse
Devuelve: NIL.
xArray Matriz, hash u objeto tArray que se mostrará en el browse
lBLine Indica si se mantiene la forma de presentar el registro en el browse (::bLine) (.t.) o si se cambia por la manera predefinida (.f.), si no se envía, se cambia por la predefinida

setLine( bLine, aHeaders, aColSizes )
Cambia ::bLine (la manera de mostrar los registros en el browse) y configura las variables necesarias para que no marque error
Devuelve: NIL.
bLine Codeblock que será el nuevo valor para ::bLine
aHeaders Nuevo valor para los encabezados (::aHeaders), si no se envía mantiene los que se tienen
aColSizes Nuevos tamaños de las columnas (::aColSizes), si no se envía mantiene los que se tienen

nHHeight()
Devuelve: Devuelve el tamaño total del atlo del encabezado en pixeles, puede ser cero si no se muestran encabezado o el tamaño total si hay uno o mas de un renglones de encabezado.

nFHeight()
Devuelve: Devuelve el tamaño total del alto de los pies de columna en pixeles, puede ser cero si no se muestran pies de columna o el tamaño total si hay uno o mas de un renglones de pies de columna.

nWRow( nRow )
Indica a que renglón del browse pertenece el punto indicado de un renglón en pixeles con respeto al browse.
Devuelve: Número de renglón del browse.
nRow Númer de renglón en pixeles

lDblClick( nRow, nCol, nKeyFlags, lModif, lNuevo )
Evento que se dispara al hacer doble click en un registro del browse, es similar a la del tWBrowse, con la difrencia de recibe dos parametros para indicar si se activa el modo edición y si es un registro nuevo, los cuales serán enviados al codeblock indicado en ::bLDblClick, esta caracteristica es aprovechada por las ventanas de la familia tWAbreBrow.
Devuelve: Tiene los mismos resultados que el método lDblClick() de la clase tWBrowse.
nRow a nCol Son los mismos parámetros de la clase tWBrowse
lModif Indica si se trata de una modificación (.t.) o consulta (.f.), cuando se da doble click siempre será .f., solamente recibe .t. cuando es llamado manualmente, generalmente desde las opciones de mantenimiento. Cuando se utilizan los métodos de los botones utilizados para el mantenimiento que maneja la librería qSoft, siempre que se envía .t. en lNuevo, también será .t. lModif,
lNuevo Indica si se trata de un la captura de un registro nuevo (.t.) o no (.f.), cuando se da doble click siempre será .f., solamente recibe .t. cuando es llamado manualmente, generalmente desde las opciones de mantenimiento.

drawHead()
Pinta los encabezados de las columna.
Devuelve: NIL

drawFoot()
Pinta los pies de la columna.
Devuelve: NIL

lEditCol( nCol, uVar, cPicture, bValid, nClrFore, nClrBack, aItems, bAction, cResource, cHotKey )
Método lEditCol de tWbrowse con la difrencia de poner un bitmap como botón dentro del GET y teclá rápida para accionar el botón del bitmap.
Devuelve: Valor lógico que indica si se realizó correctamente la edición (.t.), o fue cancelada (.f.)
nCol a bAction Método lEditCol de tWbrowse con la difrencia de poner un bitmap como botón dentro del GET y teclá rápida para accionar el botón del bitmap
cResource Nombre del recurso utilizado para el bóton
cHotKey Tecla rápida para activar el click del botón

meter( nCol, xFuncion, aParam )
Pone un meter dentro de una celda en el registro activo.
Devuelve: El resultado que devuelva xFuncion.
nCol Colmna donde se pondrá el meter
xFuncion Codeblock o apuntador a una función (@) que se evaluara para el proceso del meter, solo hay que recordar que al momento de que xFuncion recibe los parámetros, siempre se enviará un objeto al objeto meter antes de los elementos aParam.
Ejemplo:
xFuncion := @miFuncion()
aParam := { "a", 1 }
function miFuncion( oMeter, cPar1, nPar2 )
aParam Matriz con parámetros que se enviarán a xFunción

unirCeldas( nInicio, nCeldas )
Indica las celdas que se unen para los renglones del browse.
Devuelve: NIL
nInicio Primera celda a unir
nCeldas Número de celdas a unir

unirHead( nInicio, nCeldas, nRenglon )
Indica las celdas que se unen para los encabezados de columna.
Devuelve: NIL
nInicio Primera celda a unir
nCeldas Número de celdas a unir
nRenglon Renglón en el cual se unirán las celdas en caso de tener mas de un renglón de encabezados

unirFoot( nInicio, nCeldas, nRenglon )
Indica las celdas que se unen para los pies de columna.
Devuelve: NIL
nInicio Primera celda a unir
nCeldas Número de celdas a unir
nRenglon Renglón en el cual se unirán las celdas en caso de tener mas de un renglón de pies de página

Ejemplo

tCAbreBrow():new( ,,,, {|| { clave, descrip } }, { "Clave", "Descripción" }, { 30. 100 }, oWnd,,,,, {|| msgInfo( "Click" ) },,,,,,,, "DATOS",,,,,,, {| x | upper( x ) } )