Page 1 of 1

New FTDN March / Marzo 2008 (8.03)

Posted: Wed Mar 12, 2008 7:27 pm
by Antonio Linares
March 2008
=========

* Enhancement: Class TMsgBar, the hand cursor is only shown when a MsgItem contains an action to be fired.

* Enhancement: The recent added function GetGuiResources() has been modified to be dynamically linked. This fixes an uncompatibility problem with Windows NT.

* New: command REDEFINE XBROWSE already available for Class TXBrowse. This will help to Class TWBrowse and similars to migrate to Class TXBrowse.

* Enhancement: Class TXBrowse scrolling and painting.

* Enhancement: Class TGet proper support for '@!' and spanish and other countries special chars like "ñ", etc.

* Fix: Class TOutLook Method EndPaint() minor fix.

* New: Class TComboBox Method End() to properly hide and destroy the dropdown editable comboboxes.

* Enhancement: Class TTabs allows to set bRClicked to disable the default shown popup menu.

* New: FiveWin.ch support for TRY ... CATCH ... END for Harbour. Not needed for xHarbour users.

* Enhancement: function aOData( <oObject> ) --> aData returns the proper DATA names if Harbour/xHarbour are used.

* Enhancement: Tooltips can now have user defined header, icon and colors, by specifying the tooltip as an array in the format { cToolTipText, [cHeader, [nIcon]], [nForeColor], [nBackColor] }. If the tooltip is specified as a codeblock, it can evaluate to a character value or an array.

* Enhancement: Improved XBrowse Commands:
Commands for xbrowse and xbrowse columns are greatly improved to provide compatibility with the commands for TWBrowse and TCBrowse and at the same time providing greater enhanced functionality. We favor using commands over the earlier detailed coding because the commands extremely simplify complex tasks, greatly reduce coding effort and provide easier maintenance of the code.

@ row, col XBROWSE and REDEFINE XBROWSE are comapatible with LISTBOX commands.

* Enhancement: for XBrowse commands:
In FIELDS <expressionlist,...>, the expressions need not evaluate to character value and can evaluate their native data type. This is recommended over the earlier practice of providing expressions to return character values. Browse object will automatically justify and format the values depending on the data type appropriately.

Optionally PICTURES <picturelist,...> and JUSTIFY <ajust,...> can be specified in line overriding default formatting and justification.

When the fields list does not involve complex expressions, COLUMNS <namesoffields,...> can also be used. For arrays COLUMNS <columnnumbers,...> can be given.

Arrays, recordsets and oDbf can be specified inline as ARRAY aData or RECORDSET oRs or OBJECT oDbf in the place of ALIAS cAliasName. There is no need to call SetArray, SetAdo, SetOdbf methods separately.

Examples:

RDD.1

@ 10, 10 XBROWSE oBrw ; // or REDEFINE XBROWSE oBrw ID 101
COLUMNS "First", "Age". "HireDate" ;
ALIAS "CUST"

oBrw:CreateFromCode() // oBrw:CreateFromResource(nID) is not required if REDEFINE is used.

ACTIVATE WINDOW / DIALOG ....

RDD.2

@ r, c XBROWSE oBrw ;
COLUMNS "First", "Age" ;
FIELDS (cAlias)->Salary + 1000 ; // both columns and fields are shown
PICTURES nil, "99", "9999999.99" ; // optional
HEADERS nil, nil, "NewSalary" ; // where nil, column names are default headers
JUSTIFY .F., AL_CENTER, .T. ; // logical values or numbers can be used
ALIAS "CUST" ;
AUTOSORT // Auto sorting if index exists on column name

Simple columns can be specified with COLUMNS and complex expressions can be specified with FIELDS.

oBrw:oCol( "NewSalary" ):cSortOrder := "SALARY" // for sorting the third column

RDD.3

REDEFINE XBROWSE oBrw ALIAS cAlias AUTOCOLS AUTOSORT

Arrays.1:

REDEFINE XBROWSE oBrw ;
COLUMNS 3, 2, 5 ; // optional if only these three columns are to be browsed ;
HEADERS "Third", "Second", "Fifth" ;
ARRAY aData ;
AUTOSORT

Arrays.2

@ 10,10 XBROWSE oBrw ARRAY aData AUTOSORT AUTOCOLS

ADO RecordSets:

ADO.1

@ 10,10 XBROWSE oBrw RECORDSET oRs AUTOCOLS AUTOSORT

ADO.2

REDEFINE XBROWSE oBrw ;
COLUMNS "First", "Last", "Salary", "HireDate" ;
[ HEADERS, PICTURES, JUSTIFY can also be used to override defaults ] ;
RECSET oRs ;
AUTOSORT

Note: Now browsing of blank recordsets is supported.

DataBase objects like TDataBase (FWH) or any object having navigational methods compatible with TDataBase.

ODBF:

@ 10,10 XBROWSE oBrw ;
[ COLUMNS "First", "Salary", ... ] ;
[ FIELDS oDbf:Age, oDbf:City ] ;
OBJECT oDbf

Autosort and AutoCols are not supported for database objects.

In addition, columns can also be added with ADD TO oBrw command similar to TCBrowse commands:

Examples:

ADD TO oBrw DATA <expr> PICTURE <pic> etc.

Editable and bOnPostEdit can be specified inline.

ADD TO oBrw ARRAY ELEMENT 4 PICTURE .... etc

* TXBrowse Enhancements: (please review samples\TestXBr3.prg)

a) bStrData: Deprecated, Users are advised to assign a codeblock returning the data in its native type ( 'N', "C", "D", "L" ) and optionally assigining the picture to oCol:cEditPicture. Browse class will automatically derive the bStrData from the bEditValue and cEditPicture, if specified, and in addition the Browse can appropriately handle the values for alignment, formatting, copy / export to excel and reports.

b) Transparent Browse: Specifying oBrw:lTransparent := .t. and oBrw:oBrw := oBrush will paint the browse transparently over the background.

c) New Method: ToExcel( [bProgress] )
Exports data in the visible columns to Excel. The method works with Excel 2003. The columns are formatted justified according to the data types and totalled of the new data lTotal of the TXBrwColumn object is set to true. If specified, bProgress codeblock is evaluated with nCompletedRows, nTotalRows.

d) Improved: SetArray: Improved to specify individual columns in user
specified order.
Syntax:

oBrw:SetArray(aData, lAutoOrder, nInitialORder, aCols )

Example:

oBrw:SetArray( aData, .t., 1, { 3, 2, 6, 1 } )

The browse will show only columns 3,2,6 and 1 of the array in that order.

e) Improved: SetRDD( [lAddColumns], [lAutoSort], [aFldNames] )
If lAutoSort parameter is set to True, the browse will sort the data on the index order having the same name as the fieldname on LeftClick on the header. It is not necessary to specify the codeblock oCol:bLClickHeader unlike earlier.

If an array containing the field names is given in the parameter aFldNames, only those fields are added to the browse.

Example: oBrw:SetRDD( .t., .t., { "First", "Last", "Salary" } )

f) Improved: SetADO( oRs, [lAddColumns], [lAutoSort], [aFldNames] ).
Functionality is similar to SetRDD.

It is now possible to browse empty recordsets.

g) New: SetODbf( oDbf, [ aCols ] ). Optionally aCols can be an array of
fieldnames. oDbf can be any object based on any data source having
navigational methods similar to TDatabase class.

h) Improvements common to SetRDD, SetAdo, etc.
Automatic justification. Numbers and Dates are automatically justified
Right by default. Values are automatically formatted based on the data
type, field length and decimals, unless overridden specifically. These
improvements simplify tedious coding in case of simple browses. Still
columns with complex data can be handled in the standard manner.

i) New Method Copy(): Pressing Ctrl+C invokes the new method Copy(). This method copies the value in the selected cell, in case of celled browses, or the entire selected row in case of row browses and all the selected rows in case multiple rows are selected to ClipBoard. Cell values are delmited by chr(9) and rows are delimited by CRLF. The text is copied in a format compatible to be pasted in Excel sheet. If oCol:bEditvalue is
specified the data type is approrpiately handled. This default behaviour can be disabled by setting oBrw:lAllowCopy := .f.

j) New Methods: DrawSelect() and RefreshCurrent() are mapped to DrawLine( .t. ) to be compatible with TWBrowse / TCBrowse syntax.

k) New Method: RefreshFooters(). This method refreshes footers only, evaluating the codeblocks if necessary, without having to Refresh the entire browse. This results fast response in case of large browses.

l) New Method: aRow() returns ::aArrayData[ ::nArrayAt ].

m) New Method: oCol( cHeader ) returns the column object matching the given header. If numberic value is passed as parameter this method is equivalent to ::aCols[ nCol ].

Example:

WITH OBJECT oBrw:oCol( "Amount" ) // column object having header "amount"
:nEditTyoe := .t.
..... etc ...
END

n) Browsing empty array:
SetArray method may be called with the array containing atleast one dummy row. This dummy row enables the browse object to assign columns with proper datatypes and widths.

After oBrw:CreateFromCode(), add the two lines ASize( aData, 0 ), oBrw:Keycount().

* TXBrwColumn enhancements:

a) New DATA nArrayCol. It is now enough to write oCol:nArrayCol := 3, instead of the earlier method of oCol:bStrData := { || cValToChar( oBrw:aArrayData[ oBrw:nArrayAt, 3 ] ) }.
Browse object automatically generates the necessary code.

b) New DATA cSortOrder. It is now not necessary to do the tedious coding of oCol:bLclickHeader to enable sorting of data in response the Left Click on the header.
Assiging the name of index order in case of RDD, column names in case of ADO or the column number of array to the Data cSortOrder is all that is needed.

c) New DATA cDataType. Internally used. Data type is automatically derived from bEditValue if specified. The datatype is internally used for formatting, alignment, reporting, export to excel and copy to clipboard methods.

d) New DATA bEditWhen. If assigned, column Edit is not invoked if the codeblock evaluates to false.

e) New DATA cEditKeys. If a character sting is specified, only key press matching one of the characters in cEditKeys will invoke Edit method in case oBrw:lFastEdit := .t..
The default behaviour is Enter Key or Double Click on the cell invokes Edit and when oBrw:lFastEdit is .t., for dates and numerics digit key and for others alphadigit key invokes edit.

f) DATAs cFooter / bFooter. Now cFooter need not be character type only. bFooter can evaluate to any data type. Footers will be formatted automatically.

g) New METHOD SetCheck ( aBitMaps/aResource, bOnPostEdit ). Logical values can be displayed as bitmaps with this method. First parameter is an array with two or three bitmaps or resource names. First bitmap is used for showing True and second bitmap is used for showing false. If bOnPostEdit parameter is specified, the column is set in edit mode. Pressing space bar or double clicking on the cell toggles the logical value.

h) New METHOD RefreshFooter(). Refreshes footer of the specified column only, evaluating bFooter, if specified.

i) If a numeric column is edited, in addition to redrawing the selected row, footer of column also is refreshed automatically if cFooter or bFooter is specified. It is no more necessary to code for refreshing the footers.

j) Number formatting. Numeric values having decimals are automatically formatted with thousand separators and right justified. This behaviour can be changed globally with xbrNumFormat( "A" or "E", .t. or .f. ). When first parameter is "E" thousand separators are dots ( "." ) and decimal separators are commans and otherwise the thousand separators are commas and decimal separators are ".". If logical value in the second parameter decides whether thousand separators are to be used or not.

* fix: Minor change in source\errsysw.prg

Re: New FTDN March / Marzo 2008

Posted: Tue Mar 25, 2008 6:00 pm
by El Loco
Antonio, vas a poner la novedades de marzo/2008 en español ???

Un abrazo. El Loco =>))

Posted: Tue Mar 25, 2008 7:56 pm
by Antonio Linares
Miguel Angel,

Sí, lo antes posible :-)

Posted: Wed Mar 26, 2008 1:57 pm
by El Loco
Antonio Linares wrote:Miguel Angel,

Sí, lo antes posible :-)
Se agradece.

Un abrazo. El Loco =>))

Posted: Sat Mar 29, 2008 9:25 pm
by Antonio Linares
Construcción Marzo 2008
==================

* Mejora: En la clase TMsgBar, el cursor "mano" sólo se muestra cuando el parámetro MsgItem contiene una acción a realizar.

* Mejora: La función GetGuiResources(), recientemente añadida, ha sido modificada para ser enlazada dinámicamente. Esta corrección se debe a un problema de incompatibilidad con Windows NT.

* Nuevo: Comando REDEFINE XBROWSE ya disponible para la clase TXBrowse. Este servirá de ayuda para migrar a la clase TXBrowse desde la clase TWBrowse y similares.

* Mejora: Mejoras en el pintado y desplazamiento (scrolling) en la clase TXBrowse.

* Mejora: A la clase TGet se le ha añadido soporte para "@!" y _ especiales como la "ñ" del español y de otros idiomas.

* Corrección: Pequeña corrección en el método EndPaint() de la clase TOutLook.

* Nuevo: Nuevo método End() en la clase TComboBox para destruir y ocultar los desplegables editables de los comboboxes.

* Mejora: En la clase TTabs se añade la posibilidad de poner "bRClicked" para deshabilitar el menú "popup" mostrado por defecto.

* Nuevo: El fichero include Fivewin.ch soporta los comandos TRY ... CATCH ... END para Harbour. No es necesario en los usuarios de xHarbour.

* Mejora: La función aOData( <oObject> ) --> aData devuelve los nombres de los DATA si se usa Harbour/xHarbour..

* Mejora: Se pueden usar cabeceras, iconos y colores en los "Tooltips", especificando el "tooltip" como una matriz con el siguiente formato { cToolTipText, [cHeader, [nIcon]], [nForeColor], [nBackColor] }. Si el "tooltip" ha sido especificado como un bloque de código "codeblock", puede retornar un valor carácter o una matriz.

* Mejora: Comandos para XBrowse mejorados: Los comandos para el manejo de la clase XBrowse han sido grandemente mejorados para proporcionar compatibilidad con los comandos de TWBrowse y TCBrowse y al mismo tiempo proporcionar una mayor funcionalidad. Creemos que el uso de comandos simplifica tareas complejas, reduce el código y proporciona una manera fácil de mantener el código.

@ row, col XBROWSE y REDEFINE XBROWSE son compatibles con el comando LISTBOX ... FIELDS ....

* Mejora: Comandos para XBrowse:

En FIELDS <expressionlist,...>, las expresiones no necesitan evaluar un valor carácter y pueden evaluar su tipo de dato nativo. Esto se recomienda para proporcionar expresiones que no devuelvan valores carácter. El objeto "browse" automáticamente justificará y dará formato a los valores dependiendo del tipo de dato apropiado.

Opcionalmente PICTURES <picturelist,...> y JUSTIFY <ajust,...> pueden ser especificadas en línea sobrescribiendo los valores por defecto de formato y justificación.

Cuando la lista de campos no implica expresiones complejas, COLUMNS <namesoffields,...> pueden usarse también. Para matrices (arrays) COLUMNS <columnnumbers,...> también.

Matrices (Arrays), conjunto de registros (recordsets) y objetos DBF (oDbf) pueden ser especificados en línea como ARRAY aData o RECORDSET oRs o OBJECT oDbf en el lugar de ALIAS cAliasName. No hay necesidad de llamar a los métodos SetArray, SetAdo, SetOdbf separadamente.

Ejemplos:

RDD.1

@ 10, 10 XBROWSE oBrw ; // or REDEFINE XBROWSE oBrw ID 101
COLUMNS "First", "Age". "HireDate" ;
ALIAS "CUST"

oBrw:CreateFromCode() // oBrw:CreateFromResource(nID) no es necesario si se usa REDEFINE.

ACTIVATE WINDOW / DIALOG ....

RDD.2

@ r, c XBROWSE oBrw ;
COLUMNS "First", "Age" ;
FIELDS (cAlias)->Salary + 1000 ; // se muestran tanto columnas como campos
PICTURES nil, "99", "9999999.99" ; // opcional
HEADERS nil, nil, "NewSalary" ; // donde nil, nombres de las columnas son las cabeceras por defecto
JUSTIFY .F., AL_CENTER, .T. ; // se pueden usar valores lógicos ó números
ALIAS "CUST" ;
AUTOSORT // Ordenamiento automático si existe un índice sobre (con) el nombre de la columna

Se puede especificar columnas simples con COLUMNS y expresiones complejas con FIELDS.

oBrw:oCol( "NewSalary" ):cSortOrder := "SALARY" // Ordenando por la tercera columna

RDD.3

REDEFINE XBROWSE oBrw ALIAS cAlias AUTOCOLS AUTOSORT

Arrays.1:

REDEFINE XBROWSE oBrw ;
COLUMNS 3, 2, 5 ; // opcional si sólo estas 3 columnas serán mostradas ;
HEADERS "Third", "Second", "Fifth" ;
ARRAY aData ;
AUTOSORT

Arrays.2

@ 10,10 XBROWSE oBrw ARRAY aData AUTOSORT AUTOCOLS

ADO RecordSets:

ADO.1

@ 10,10 XBROWSE oBrw RECORDSET oRs AUTOCOLS AUTOSORT

ADO.2

REDEFINE XBROWSE oBrw ;
COLUMNS "First", "Last", "Salary", "HireDate" ;
[ HEADERS, PICTURES, JUSTIFY can also be used to override defaults ] ;
RECSET oRs ;
AUTOSORT

Nota: Ahora se soporta el mostrado de recodsets vacios.

Objetos de base de datos como TDataBase (FWH) o cualquier otro objeto con métodos con navegación compatible con TDataBase.

ODBF:

@ 10,10 XBROWSE oBrw ;
[ COLUMNS "First", "Salary", ... ] ;
[ FIELDS oDbf:Age, oDbf:City ] ;
OBJECT oDbf

Los objetos de base de datos no soportan Autosort y AutoCols.

Además, se pueden añadir columnas con el comando ADD TO oBrw, similar a los comandos TCBrowse:

Ejemplos:

ADD TO oBrw DATA <expr> PICTURE <pic> etc.

En línea se pueden especificar "Editable" y "bOnPostEdit".

ADD TO oBrw ARRAY ELEMENT 4 PICTURE .... etc

* Mejoras en TXBrowse: (Por favor, revisa el ejmeplo samples\TestXBr3.prg)

a) bStrData: OBSOLETO, se aconseja a los usuarios asignar un bloque de código devolviendo los datos en su tipo nativo ( 'N', "C", "D", "L" ) y opcionalmente asignando la imagen a oCol:cEditPicture. La clase Browse deriva bStrData de bEditValue y cEditPicture, si se especifica, además el "Browse" puede manejar apropiadamente los valores de alineación,
formato, copiar /exportar a Excel e informes.

b) "Browse" transparente: Especificando oBrw:lTransparent := .t. y oBrw:oBrw := oBrush pintará el browse transparente sobre el fondo.

c) Nuevo método: ToExcel( [bProgress] )

Exporta los datos en las columnas visibles a Excel. El método funciona con Excel 2003 y 2007. Las columnas son formateadas justificadas de acuerdo al tipo de datos y totalizados si el nuevo "data" lTotal del objeto TXBrwColumn es puestoa a TRUE.

Si se especifica el bloque de código (codeblock) bProgress es evaluado con nCompletedRows, nTotalRows.

d) Mejorado: SetArray: Mejorado al especificar columnas individuales en el orden especificado por el usuario.

Sintáxis:

oBrw:SetArray(aData, lAutoOrder, nInitialORder, aCols )

Ejemplo:

oBrw:SetArray( aData, .t., 1, { 3, 2, 6, 1 } )

El "browse" sólo mostrará las columnas 3,2,6 y 1 de la matriz (array) en ese orden.

e) Mejorado: SetRDD( [lAddColumns], [lAutoSort], [aFldNames] )

Si el parámetro lAutoSort es puesto a TRUE, el "browse" ordenará los datos en el orden del índice teniendo el mismo nombre que el nombre de campo al pulsar el botón izquierdo del ratón teniendo el puntero sobre la cabecera. No es necesario especificar el boque de código (codeblock) oCol:bLClickHeader a diferencia de antes.

Si una matriz (array) conteniendo los nombres de campo se dá en el parámetro aFldNames, sólo _ se añadirán al "browse".

Ejemplo: oBrw:SetRDD( .t., .t., { "First", "Last", "Salary" } )

f) Mejorado: SetADO( oRs, [lAddColumns], [lAutoSort], [aFldNames] ).
La funcionalidad es similar a la de SetRDD.

No es posible mostrar un conjunto de registros (recordset) vacio.

g) Nuevo: SetODbf( oDbf, [ aCols ] )
Opcionalmente aCols puede ser una matriz (array) de nombres de campo. oDbf puede ser cualquier objeto basado en cualquier fuente
de datos teniendo métodos navegacionales similares a la clase TDataBase.

h) Mejoras comunes a SetRDD, SetADO, etc.
Justificaciones automáticas. Los números y fechas son justificados automáticamente a la derecha por defecto. Los valores son
automáticamente formateados teniendo en cuenta su tipo de dato, longitud de campo y decimales, a menos que especifiquemos lo contrario.
Estas mejoras simplifican el código en _ de "browses" simples. Las columnas con datos complejos se pueden tratar de la manera
estandar.

i) Nuevo método Copy()

Pulsando Ctrl+C se llama al nuevo método Copy(). Este método copia el valor en la celda seleccionada, en caso de "browses" por celdas, ó por la fila seleccionada entera en caso de "browses" por filas y todas las filas seleccionadas en caso de multiples filas son seleccionadas al portapapeles.

Los valores de las celdas están delimitados por el carácter chr(9) y las filas delimitadas por "CRLF". El texto es copiado en un formato compatible para se pegado en una hoja Excel. Si se especifica oCol:bEditvalue el tipo de dato se maneja adecuadamente.

Este comportamiento por defecto se puede deshabilitar poniendo oBrw:lAllowCopy := .f.

j) Nuevos métodos: DrawSelect() y RefreshCurrent() son mapeados DrawLine( .t. ) para ser compatible con la sintáxis de TWBrowse / TCBrowse.

k) Nuevo método: RefreshFooters().
Este método refresca únicamente los pies, evaluando los bloques de código (codeblocks) si es necesario, sin refrescar el "browse" completo. Esto resulta más rápido en caso de grandes "browses".

l) Nuevo método: aRow()
Devuelve ::aArrayData[ ::nArrayAt ].

m) Nuevo método: oCol( cHeader )
Devuelve el objeto columna acompañado de la cabecera dada. Si un valor numérico es pasado como parámetro este método es equivalente
a ::aCols[ nCol ].

Ejemplo:

WITH OBJECT oBrw:oCol( "Amount" ) // column object having header "amount"
:nEditType := .t.
..... etc ...
END

n) Mostrando una matriz (array) vacio:
El método SetArray() puede ser llamado conteniendo la matriz (array) al menos una fila vacia. Esta fila vacia permite al objeto "browse" asignar columnas con el ancho y el tipo de dato adecuado.

Después de oBrw:CreateFromCode(), añade las siguientes dos líneas:

ASize( aData, 0 )
oBrw:Keycount()

* Mejoras en TXBrwColumn:

a) Nuevo método nArrayCol
Ahora es suficiente escribir oCol:nArrayCol := 3, en lugar del anterior método:

oCol:bStrData := { || cValToChar( oBrw:aArrayData[ oBrw:nArrayAt, 3 ] ) }

El objeto "Browse" genera automáticamente el código necesario.

b) Nueva DATA cSortOrder
Ahora no es necesario hacer la tediosa oCol:bLclickHeader para activar la ordenación de los datos al pulsar el botón izquierdo del ratón estando el puntero del mismo sobre la cabecera.

Asignando el nombre del índice en caso de RDD, el nombre de las columnas en caso de ADO ó el número de la columna de la matriz (array) a la DATA cSortOrder es todo lo que necesitas.

c) Nueva DATA cDataType
Usada internamente. El tipo de dato es derivado automáticamente de bEditvalue si se especifica. El tipo de dato es usado internamente para
dar formato, alinear, informes, exportar a Excel y copiar al portapapeles.

d) Nuevo DATA bEditWhen
Si se asigna, en la edición de columna no es llamado, si el bloque de código (codeblock) se evalua a FALSE.

e) Nueva DATA cEditKeys
Si se especifica un carácter cadena, sólo pulsando la tecla coincidente con el carácter en cEditKeys llamará al método de edición en el caso que oBrw:lFastEdit := .t..

El comportamiento por defecto es la tecla ENTER ó hacer doble click en la celda llama al método de edición y cuando oBrw:lFastEdit is .t., para fechas y dígitos numéricos y otros valores alfanuméricos llama al método de edición.

f) DATAS cFooter / bFooter
Ahora cFooter no tiene porqué ser sólo de tipo carácter. bFooter puede evaluar cualquier tipo de dato. Los pies de página serán formateados
automáticamente.

g) Nuevo método SetCheck ( aBitMaps/aResource, bOnPostEdit )
Los valores lógicos pueden ser mostrados como imágenes (bitmaps) con este método. El primer parámetro es una matriz (array) con dos o tres
imágenes (bitmaps) ó nombres de recursos. La primera imagen (bitmap) es usada para mostrar TRUE y la segunda para mostrar FALSE. Si se
especifica el parámetro bOnPostEdit, la columna es puesta en modo de edición. Pulsando la barra espaciadora ó haciendo doble click sobre la
celda cambiará el valor lógico.

h) Nuevo método RefreshFooter()
Refresca el pie de la columna especificada sólo, evaluando bFooter, si se especifica.

i) Si edita una columna numérica, además se redibuja la fila seleccionada, el pie de la columna se refresca automáticamene si cFooter ó bFooter se especifican. Ya no es necesario añadir más código para hacer un refresco de los pies.

j) Dando formato a los números
Los valores numéricos que tienen decimales son automáticamente formateados con separador de miles y justificados a la derecha.

Este comportamiento puede ser cambiado globalmente con xbrNumFormat( "A" ó "E", .T. ó .F. ). Cuando el primer parámetro es "E", el separador
de miles es el punto (".") y el separador de decimales es la coma (","), de lo contrario el separador de miles será la coma (",") y el separador de decimales será el punto ("."). Si el segundo parámetro es un valor lógico, este indicará si se utilizará separador de miles o no.

* Corrección: Pequeño cambio en source\errsysw.prg

Posted: Sun Mar 30, 2008 7:29 am
by El Loco
Gracias Antonio !!!

Un abrazo. El Loco =>))

Posted: Sun Mar 30, 2008 9:08 am
by Antonio Linares
De nada :-)