New FTDN June/Junio 2009 (9.06)

New FTDN June/Junio 2009 (9.06)

Postby Antonio Linares » Sat Jul 11, 2009 5:12 pm

June 2009
=========

* Fix: recent enhancements in Class TBtnBmp were not properly releasing GDI objects. Now it is ok.

* Enhancement: Class TBtnBmp enhanced painting, very similar to Office 2007 buttons look.
Please review FWH\samples\TestBtn3.prg.

* Fix: Class TXBrowse was not properly releasing GDI objects. Now it is ok.

* New: function BmpToStr( hBitmap ) --> cBitmapAsString, this function allows to convert any bitmap
into a string that you can save into a memo field, to SQL servers, to disk, etc. Example of use:

#include "FiveWin.ch"

function Main()

local hBmp := ReadBitmap( 0, "test.bmp" )

MsgInfo( hBmp )
MemoWrit( "another.bmp", BmpToStr( hBmp ) )
DeleteObject( hBmp )

return nil

* Enhancements: Class TBrush

a. Now any image file ( jpg, png, etc. ) can be used to create a Brush.
b. Brush can also be created from a bitmap handle by specifying the handle as the fifth parameter of TBrush():New() method. Command support for this is not provided.

* Enhancement: Class TRichEdit:

a. When more than one richedit control was used simultaneously, windows exception error used to occur after
closing the application window.

b. Now this is fixed. Any number of richedit controls can be used simultaneously.

* Enhancement: function MemoEdit():

a. Memoedit is improved to handle richedit text also automatically.

* Enhancement: Class TWindow Method lValid(), added Self as parameter while evaluating bValid. This ensures that
in all valid codeblocks, we can expect the control object as the first parameter. This is very convenient while
writing valid functions. This does not break existing code, but useful for those who use it.

* Fix: Class TSay, SAY … TRANSPARENT were not working on a Window, if the application is Themed. Now it is ok.

* Enhancements: Class TXBrowse:

a. GDI resource leaks in previous versions of xBrowse are now prevented.

b. XBrowse can now browse almost all kinds of data ( collection objects). Simplest way of invoking browse of
any data is by XBrowse( uData ) or XBROWSER uData.

c. Arrays:

i. Array Handling capacities are revamped. It is possible to browse blank arrays, single and multi
dimensional arrays and ragged arrays.

ii. Different rows of ragged arrays can have either arrays of different sizes or any normal data-types.
Individual array elements of any row can contain any data-type including nested arrays, record sets,
data objects or hashes. Double click on a nested array ( or hash, object ) invokes xbrowse of that
array / hash/ object.

iii. By default, xbrowse allocates columns for the maximum number of columns contained in any row. Data
alignment is decided on the basis of the type of each array element. Different data-types in the same
column in different rows are aligned appropriate to that value.

iv. Bug in SetCheck method for arrays is now fixed.

d. Hashes and Array of Hashes, Now browsing of hashes and array of hashes work both in Harbour and xHarbour

e. Trees constructed with LinkList class of FWH

f. Objects:

i. Any object, including a user created class, which contains the necessary navigational methods, viz.,
GoTop(), GoBottom(), Bof(), Eof(), Skip(), RecNo(), GoTo() and Skipper() can be browsed like a table.
Examples are TDataBase, TTxtFile(), etc.

ii. TOleObject: At present only ADODB.RecordSet objects are supported. Double clicking on Child
RecordSets ( type : adChapter ) invokes browse of the child.

iii. When any other kind of object is browsed, all Datas and their values are shown. By default, the
values can be edited and if the values refer to any collection object, double clicking invokes xbrowse
of that object. (This can be of use during development for inspection of object data).

Examples : XBrowse( oWnd ), XBrowse( oBrw ).

Can be tested while defining any object with code like oDlg:bRclicked := {|r,c,f,o| XBrowse( o ) }.

g. Image rendering

i. In the previous versions, if a column contains file name of a picture, the picture is read from the
file and displayed inline, if oCol:nEditType is set to EDIT_IMAGE ( -1 ). However the programmer was
required to set adequate width of the column and row height of the browse. If the size of image was
larger, it used to overflow to other rows and columns.

ii. Inline Image rendering in columns is now revamped and improved.

Xbrowse automatically allocates adequate column width and row height ( not exceeding 1/10th of screen width
and height ) on the basis of the image in the first row. The default dimensions can be overridden in the program.

While rendering, if the image size exceeds the column width and height, the image is resized to fit the column
dimensions, keeping the proportions in tact.

Now the columns value need not be a file name but can also be an image buffer. Image buffer is directly
rendered in the cell as image, without any disk operation. This suits browsing of tables containing image data
in memo fields or blob columns.

If the columns value is either file name of image or image data, oCol:cDataType should be set to "F".
This is the recommended method instead of assigning -1 to nEditType, though this is retained for backward
compatibility. When datatype is set to "F", xbrowse first checks if the file exists and if so, it reads the
file and renders the image. If it can not find the file, it tries to treat the value as image data and tries
to render the image from the data. Otherwise the cell is left blank.

If the columns value is image data, oCol:cDataType may be set to "P". In this case, image data is directly
rendered in the cell, without any disk access.

In case of browsing ADT tables, if the columns type is Image ( or "P" ) xbrowse automatically recognizes the
value as image data and sets the data-type to "P", No coding is required from the programmer.

Exporting to Excel will export images also to the respective cells with proper dimensions based on the xbrowse
cell dimensions.

h. Background Image for xbrowse:

oBrw:SetBackGround( <brush/bitmap/resource> ) was accepting only brush / bitmap / resource only and painting the background in tiled mode only.
Data cBmpAdjBrush was provided to paint a stretched background from any image file. But the functionality was very limited.
Now the SetBackGround method is revamped and improved to handle any type of image and different types of painting. Now the background works well both for dialogs and windows and compatible with resizing the windows.

New Syntax:
oBrw:SetBackGround( <oBrush/cAnyImageFile/cResource/hBitmap/NIL>, <NIL/ 0 / 1 / 2 > )

Second parameter indicates the background paint mode.
0 : Tiled mode : Paints the image in tiled mode. ( Default )
1 : Stretch mode : Stretches the image to fill the entire data area ( does not maintain proportions of the image )
2 : Fill mode: Stretches or compresses the image, keeping proportions intact, just enough to fill the entire data area.

oBrw:SetBackGround() with no parameters or both parameters set to NIL, cancels background painting
oBrw:SetBackGround( uImage ) sets the new image as background, without changing the paint mode set earlier.
oBrw:SetBackGround( nil, nPaintMode ) changes the paintmode of the image already set as background image.

i. Pasting and saving images from clipborad the Image type columns:
It was possible to paste any data from the clipboard into xbrowse cells ( copy ranges from excel into group of xbrowse cells or any data into individual cells) if pasting is enabled by setting oBrw:lCanPaste := .t..
This feature was limited to data only. Now images can be pasted into Image type columns and saved, if oBrw:lCanPaste is .t. and the oCol:nEditType is 1 and the columns cDataType is 'P'
The images in Wwonders.dbf in the samples folder are copied and pasted from the web directly into the dbf through xbrowse.

Export to Excel:

i. Export of memo field contents are now properly handled. Tabs are converted to spaces and CRLFs are
coverted to line-feeds.

ii. At present, export to Excel is performed by copying blocks of rows and columns to clipboard and pasting
into excel sheet. This method is faster but does not suit all situations and at times is language dependant.

iii. New data lExcelCellWise ( defaults to .f. ) is provided to change this behavior. If this data is set
to .t., individual values row-wise and column-wise are assigned to corresponding cells in the excel sheet.
This data can be set to .T., if the default method does not suit the needs. This method is also language
independent. XBrowse automatically switches to this method while browsing arrays or the data contains images.

Report method now handles memo values properly.

Inline edit of multiline memo fields:

i. Up and down arrow keys do not exit the multiline edit, unlike in previous versions.

ii. Bug fixed: Earlier edit was not allowing adding more text and lines Now fixed.

Method oCol(cHeader): This method used to raise run-time error, when headers for some columns are not set to
character value. Now this is fixed.

Improved Multiple row selection: Now multiple rows can be selected by Shift-Up and Shift-Down arrow keys also.

TXBrwColumn class:

i. Method SetCheck( aBmp, uEdit, aPrompts )

Bug while using setcheck method for arrays is fixed.

Second Paramter: uEdit

a. If this parameter is a codeblock, this is taken as bOnPostEdit block of the column and nEditType is set
to 1. It may be noted that in most cases, this is not necessary because the default bOnPostEdit block
provided by XBrowse works satisfactorily. This code block is necessary only while creating the column in
full OOPs way or if a different behavior is desired.

b. Alternatively this can be a logical value. If set to True, the column?s nEditType is set to EDIT_GET.

c. If this parameter is numeric, nEditType is set to the value provided. Zero value does not permit edit
and a non-zero value permits edit.

Third parameter; aPrompts. If provided, the prompts will be used to display in addition to the check bitmaps.
Example: oCol:SetCheck( { "ON", "OFF" }, .t., { "Male", "Female" } )

ii. DATA bOnChange ( New ). Executed when the column?s data is changed with two parameters, (1) Column
object and (2) pre-edit value. This code block can be used for any operations depending on change of
value of a cell.

iii. DATA nDataLen: (New) Optionally length of data can be specified in number of characters. This may be
easier than specifying the nWidth in pixels, which depends mostly on the font size and the device
context. If specified, this value is used for specifying the column size in Report method also. While
creating XBrowse with command syntax, if negative value is specified in COLSIZES clause, the value is
taken as column size in number of characters otherwise in pixels.

* Enhancement: XBROWSER Command:

New clause FASTEDIT. If this clause is specified, the browse is set to fast-edit mode and all columns are
made editable.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: New FTDN June/Junio 2009 (9.06)

Postby Ross_ValuSoft » Sun Jul 12, 2009 6:45 am

Not Found

The requested URL /software/ftdn/fwh.exe was not found on this server.

Cheers,

Ross
User avatar
Ross_ValuSoft
 
Posts: 87
Joined: Thu Dec 18, 2008 11:27 am
Location: Melbourne, Australia

Re: New FTDN June/Junio 2009 (9.06)

Postby Antonio Linares » Sun Jul 12, 2009 8:16 am

Ross,

Please try it again, we were uploading a revised build :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: New FTDN June/Junio 2009 (9.06)

Postby toninhofwi » Sun Jul 12, 2009 12:48 pm

Hi Antonio,

Is this version compatible with latest harbour SVN please ?


Regards,

Toninho.
toninhofwi
 
Posts: 170
Joined: Tue Oct 18, 2005 10:01 am

Re: New FTDN June/Junio 2009 (9.06)

Postby Antonio Linares » Sun Jul 12, 2009 2:36 pm

Toninho,

No, not yet. We may do it for next build.

Anyhow, current Harbour SVN is beta code. Better use Harbour stable 1.0.1 for development.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: New FTDN June/Junio 2009 (9.06)

Postby Ross_ValuSoft » Mon Jul 13, 2009 4:34 am

Success. Thanks Antonio.

Cheers,

Ross
User avatar
Ross_ValuSoft
 
Posts: 87
Joined: Thu Dec 18, 2008 11:27 am
Location: Melbourne, Australia

Re: New FTDN June/Junio 2009 (9.06)

Postby Rossine » Thu Jul 16, 2009 5:06 pm

Hello Antonio,

Strengthening the application of Toninho. I need this very important change.

I count on your understanding :)
Obrigado, Regards, Saludos

Rossine.

Harbour and Harbour++
Rossine
 
Posts: 344
Joined: Tue Oct 11, 2005 11:33 am

Re: New FTDN June/Junio 2009 (9.06)

Postby Antonio Linares » Thu Jul 16, 2009 5:15 pm

Rossine,

We want to become compatible with latest Harbour beta, but meanwhile we don't find a way to keep backwards compatibility, we are not going to force all FWH and Harbour users to use a beta instead of the stable Harbour version.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: New FTDN June/Junio 2009 (9.06)

Postby Lautaro » Fri Jul 17, 2009 2:44 pm

Antonio,

Perdon si lo que digo es una burrada, pero ¿ Es posible tener 2 librerias, una que funcione con la version beta y siguientes y otra que funcione con las anteriores ?

Mis disculpas si lo que digo es una tonteria, pero ignoro las dificultades que podria traer, ya que segun se la diferencia solo es a nivel de codigo en C no en el codigo prg.


Atte.,

Lautaro Moreira
User avatar
Lautaro
 
Posts: 322
Joined: Fri Oct 07, 2005 2:44 pm
Location: Osorno, Chile

Re: New FTDN June/Junio 2009 (9.06)

Postby Antonio Linares » Sat Jul 18, 2009 8:12 am

Lautaro,

Lo que dices es muy sensato. El problema es que han modificado el extend system de Harbour y ya no es compatible con versiones anteriores salvo que se recompile todo el código en C.

Mantener dos versiones no es dificil, pero lo ideal es solo necesitar una.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: New FTDN June/Junio 2009 (9.06)

Postby Lautaro » Mon Jul 20, 2009 7:20 pm

Antonio,

Completamente de acuerdo en que es mejor tener una sola version, pero el tener 2 podria ser una solucion pasajera que daria tiempo y flexibilidad mientras se tiene una solucion definitiva.

Atte.,

Lautaro Moreira
Osorno
Chile
User avatar
Lautaro
 
Posts: 322
Joined: Fri Oct 07, 2005 2:44 pm
Location: Osorno, Chile

Re: New FTDN June/Junio 2009 (9.06)

Postby Antonio Linares » Mon Jul 20, 2009 7:38 pm

Lautaro,

Existe el problema adicional de la compatibilidad entre Harbour y xHarbour, ya que si se ha modificado el extend system, entonces FiveHC.lib ya no será la misma entre Harbour y xHarbour como hasta ahora.

Hay que buscar una forma de compatibilizar los cambios introducidos. Aún no hemos tenido tiempo de ponernos a estudiarlos, pero lo haremos cuanto antes.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: New FTDN June/Junio 2009 (9.06)

Postby Antonio Linares » Mon Jul 20, 2009 10:55 pm

Junio 2009
==========

* Corrección: Mejoras recientes en la clase TBtnBmp no estaban liberando correctamente los objetos GDI. Ahora está perfecta.

* Mejora: Se ha mejorado el pintado en la clase TBtnBmp, muy similar a la apariencia de los botones de Office 2007.
Por favor, revise el ejemplo FWH\samples\TestBtn3.prg.

* Corrección: La clase TXBrowse no estaba liberando correctamente los objetos GDI. Ahora está perfecta.

* Nuevo: Nueva función BmpToStr( hBitmap ) --> cBitmapAsString, esta función permite convertir cualquier imagen de mapa de bits
"bitmap" en una cadena de caractéres que se puede guardar en un campo memo, en servidores SQL, a disco, etc...
Ejemplo de uso:

#include "FiveWin.ch"

function Main()

local hBmp := ReadBitmap( 0, "test.bmp" )

MsgInfo( hBmp )
MemoWrit( "another.bmp", BmpToStr( hBmp ) )
DeleteObject( hBmp )

return nil

* Mejoras: En la clase TBrush

a. Ahora, cualquier ichero de imagen ( jpg, png, etc. ) puede ser usada para crear una brocha "Brush".

b. La brocha "brush" puede también ser creada desde un manejador de imagen de mapa de bits especificando el manejador como quinto
parámetro del método TBrush():New(). No se proporciona soporte para este comando.

* Mejoras: En la clase TRichEdit:

a. Cuando más de un control richedit se usaban simultáneamente, al cerrar la ventana de la aplicación solía aparecer una ventana
con un error de excepción.

b. Ahora esto está solucionado. Se puede usar cualquier número de controles richedit simultáneamente.

* Mejora: Función MemoEdit():

a. Se ha mejorado Memoedit para manejar texto rico también automáticamente.

* Mejora: En el método lValid() de la clase TWindow, se ha añadido Self como parámetro mientras se evalúa bValid. Esto garantiza
que en todas las validaciones de los bloques de código, podemos esperar el objeto del control como primer parámetro. Esto es
muy conveniente mientras escribimos funciones de validación. Esto no rompe el código existente, pero útil para aquellos que lo
usan.

* Corrección: En la clase TSay, SAY ... TRANSPARENT no estaba funcionando en una ventana, si la aplicación usaba Temas. Ahora está
perfecta.

* Mejoras: Class TXBrowse:

a. Ahora se previenen la pérdida de recursos GDI que se daban en versiones anteriores.

b. Ahora XBrowse puede navegar por casi todos los tipos de datos ( objetos de colección ). La manera más sencilla de navegación sobre
cualquier dato es llamando a XBrowse( uData ) o XBROWSER uData.

c. Matrices:

i. Se ha renovado la capacidad de manipulación de matrices. Es posible navegar por matrices vacias, matrices de una dimensión y de varias
dimensiones y matrices rasgados.

ii. Diferentes filas de matrices de matrices pueden tener matrices de diferentes tamaños o cualquier tipo de dato normal. Cualquier elemento
individual de la matriz puede contener cualquier tipo de dato, incluyendo matrices anidadas, conjuntos de registros, objetos de datos ó
hashes. Con una doble pulsación sobre una matriz anidada ( o hash, objeto ) llamamos a la navegación sobre la matriz / hash / objeto.

iii. Por defecto, xbrowse asigna columnas para el número máximo de columnas que figuran en cualquier fila. El alinamiento de los datos
se decide en base al tipo de cada elemento de la matriz. Diferentes tipos de datos en la misma columna en diferentes filas son alineados
al valor apropiado.

iv. El error en el método SetCheck para matrices ahora está solucionado.

d. Hashes y matrices de hashes. Ahora la navegación de hashes y matrices de hashes funciona en Harbour y en xHarbour.

e. Arboles. Son construidos con la clase LinkList de FWH.

f. Objects:

i. Cualquier objeto, incluyendo clases creadas por los usuarios, las cuales contienen los métodos de navegación,viz.,
GoTop(), GoBottom(), Bof(), Eof(), Skip(), RecNo(), GoTo() y Skipper() se puede navegar sobre ellas como en una tabla.
Los ejemplos son TDataBase, TTxtFile(), etc.

ii. TOleObject: Por el momento sólo son soportados los objetos ADODB.RecordSet. Haciendo un doble clic sobre un
RecordSets ( type : adChapter ) hijo, se invoca a la navegación sobre el hijo.

iii. Cuando se navega por cualquier clase de objeto, se muestran todas las "datas" y sus valores. Por defecto, los valores se pueden editar y
si los valores se refieren a cualquier colección de objetos, haciendo un doble clic llamamos a la navegación sobre el objeto. (Esto puede
ser útil durante el proceso de desarrollo para la inspección de los datos del objeto).

Ejemplos : XBrowse( oWnd ), XBrowse( oBrw ).

Puede ser probado mientras la definición de cualquier objeto con un código como oDlg:bRclicked := {|r,c,f,o| XBrowse( o ) }.

g. Renderización de imagen ( http://es.wikipedia.org/wiki/Renderización )

i. En versiones anteriores, si una columna contenía el nombre de un fichero de imagen, la imagen era leida desde el fichero y se muestra en
línea, si oCol:nEditType es puesto a EDIT_IMAGE ( -1 ). Sin embargo, se requiere que el programador adecue el ancho de la columna y la
altura de la fila del "browse". Si el tamaño de la imagen era mayor, se usaba para desbordar otras filas y columnas.

ii. Se ha renovado y mejorado la renderización de imágenes.

Xbrowse asigna automáticamente el ancho y alto adecuado de la columna y fila ( no excediendo un 1/10 del ancho y alto de la pantalla ) sobre
la base de la imagen en la primera fila. Las dimensiones por defecto se pueden sobreescribir en el programa.

Durante el renderizado, si el tamaño de la imagen excede el ancho y alto de la columna, se adapta al tamaño de las dimensiones de la columna,
manteniendo las proporciones.

Ahora los valores de las columnas no necesitan ser un nombre de fichero, pero también se puede utilizar una memoria intermedia de la imagen.
La memoria intermedia de la imagen se renderiza directamente en la celda como imagen, sin ninguna operación de disco. Esto adapta la navegación
de tablas que contienen imágenesen cmpos memo o columnas con datos de tipo blob.

Si el valor de la columna es el nombre del archivo de imagen ó los datos de la imagen, se debería poner oCol:cDataType a "F".
Este es el método recomendado en lugar de asignar -1 a nEditType, aunque se mantiene por compatibilidad. Cuando el tipo de dato es puesto a "F",
xbrowse primero comprueba si el fichero existe y si existe, lee el fichero y renderiza la imagen.Si no puede encontrar el archivo, intenta tratar
el valor de los datos de la imagen y renderiza la imagen desde los datos. De lo contrario, la celda se deja en blanco.

Si el valor de la columna es un dato de imagen, oCol:cDataType se puede poner a "P". En este caso, los datos de la imagen se renderizan
directamente en la celda, sin ningún acceso a disco.

En caso de navegación sobre tablas ADT, si el tipo de dato de la columna es imagen ( ó "P" ), xbrowse automáticamente reconoce el valor de
los datos de la imagen y establece el tipo de dato a "P", no se necesita ningún tipo de codificación por parte de los programadores.

La exportación a Excel, exportará las imágenes también a sus respectivas celdas con las dimensiones apropiadas basadas en las dimensiones de
las celdas del xbrowse.

h. Imagen de fondo para xbrowse:

oBrw:SetBackGround( <brush/bitmap/resource> ) sólo estaba aceptando brush / bitmap / resource y pintando el fondo sólo en modo mosáico.
Se estaba proporcionando la data cBmpAdjBrush para pintar un fondo estirado desde cualquier fichero de imagen. Pero la funcionalidad era
muy limitada. Se ha renovado y mejorado el método SetBackGround para manejar cualquier tipo de imagen y diferentes tipos de pintado.
Ahora el fondo funciona bien tanto para los cuadros de diálogo y ventanas y es compatible con el redimensionamiento de las ventanas.

Nueva sintáxis:

oBrw:SetBackGround( <oBrush/cAnyImageFile/cResource/hBitmap/NIL>, <NIL/ 0 / 1 / 2 > )

El segundo parámetro indica el modo de pintado del fondo:

0 : Modo mosáico : Pinta la imagen en modo mosáico. ( Por defecto )
1 : Modo estirado : Estira la imagen para rellenar todo el área de datos ( no mantiene las proporciones de la imagen )
2 : Modo relleno: Estira o comprime la imagen, manteniendo las proporciones, lo suficiente para llenar el área de datos.

oBrw:SetBackGround() sin parámetros o ambos parámetros puestos a NIL, cancela el pintado del fondo.
oBrw:SetBackGround( uImage ) establece la nueva imagen como fondo, sin cambiar el modo de pintado anterior.
oBrw:SetBackGround( nil, nPaintMode ) cambia el modo de pintado de la imagen establecida como imagen de fondo.

i. Pegando y guardando imágenes desde el portapapeles en columnas de tipo imagen:

Era posible pegar cualquier dato del portapapeles en celdas de xbrowse ( copiar rangos desde Excel dentro de un grupo de celdas
de xbrowse ó cualquier dato en celdas individuales ) si el pegado está habilitado estableciendo oBrw:lCanPaste := .T..
Esta característica estaba limitada únicamente a datos. Ahora las imágenes se pueden pegar y guardar en columnas de tipo imagen,
si oBrw:lCanPaste se establece como .T. y oCol:nEditType es 1 y cDataType es 'P'.

Las imágenes enel fichero Wwonders.dbf de la carpeta samples son copiadas y pegadas directamente desde la web en la base de datos
(dbf) a través de un xbrowse.

Exportar a Excel:

i. La exportación del contenido de un campo memo ahora se maneja correctamente. Las tabulaciones son convertidas a espacios y los CRLFs
son convertidos a saltos de línea.

ii. En la actualidad, la exportación a Excel se realiza mediante la copia de bloques de filas y columnas al portapapeles y pegarlo en la
hoja Excel. Este método es más rápido, pero no satisface todas las situaciones y, en ocasiones, es dependiente del lenguaje.

iii. Se proporciona una nueva data lExcelCellWise ( por defecto a .F. ) para cambiar este comportamiento. Si estos datos se establecen a
.T., los valores de fila y columna son asignados a las celdas correspondientes en la hoja Excel.
Estos datos se pueden ajustar a. T., si el método por omisión no satisface las necesidades. Este método también es independiente del
idioma. XBrowse cambia automáticamente a este método durante la navegación o las matrices de datos contiene imágenes.

El método Report ahora maneja correctamente los valores memo.

Edición en línea de campos memo multilínea:

i. Las flechas arriba y abajo no sacan de la edición multilínea, al contrario que en versiones anteriores.

ii. Error solucionado: La edición en versiones anteriores no permitía añadir más texto y línea. Ahora solucionado.

Método oCol(cHeader): Este método se usa para localizar los errores en tiempo de ejecución, cuando las cabeceras de algunas columnas no
se establecen a valor carácter. Ahora está solucionado.

Mejorada la selección múltiple de filas: Ahora se pueden seleccionar múltiples filas mediante Shift-Up y Shift-Down y las flechas
también.

Clase TXBrwColumn:

i. Método SetCheck( aBmp, uEdit, aPrompts )

Se ha solucionado el error del método setcheck para matrices.

Segundo parámetro: uEdit

a. Si este parámetro es un bloque de código, esto es tomado como el bloque bOnPostEdit de la columna y nEditType se
establece a 1. Cabe señalar que en la mayoría de los casos, esto no es necesario porque el bloque por defecto
bOnPostEdit proporcionada por XBrowse funciona satisfactoriamente. Este bloque de código sólo es necesario durante
la creación de la columna cuando usamos la OOPS al completo o sí se desea un coportamiento diferente.

b. Alternativamente este puede ser un valor lógico. Si se establece a .T., se establece nEditType a EDIT_GET.

c. Si este parámetro es numérico, nEditType se establece al valor proporcionado. un valor cero no permite la
edición y un valor distinto de cero permite la edición.

Tercer parámetro; aPrompts. Si se proporciona, se usará para mostrar además de comprobar los mapas de bits.
Ejemplo: oCol:SetCheck( { "ON", "OFF" }, .t., { "Male", "Female" } )

ii. DATA bOnChange ( Nuevo ). Ejecutada cuando los datos de las columnas son cambiados con dos parámetros,
(1) Columna objeto y (2) antes de editar el valor. Este bloque de código se puede utilizar para cualquier
operacion dependiente del cambio de valor de una celda.

iii. DATA nDataLen: ( Nuevo ). Opcionalmente la longitud de los datos se puede especificar en número de
caractéres. Esto puede ser más fácil que especificar nWidth en pixels, depende del tamaño de la
fuente y el dispositivo. Si se especifica, este valor se usa para especificar el tamaño de la columna en
el método Report también. Durante la creación del XBrowse desde comando, si se especifica un valor negativo
en la clausula COLSIZES, el valor es tomado como el tamaño de la columna en número de caractéres de otro
modo en pixels.

* Mejora: Comando XBROWSER:

Nueva clausula FASTEDIT. Si se especifica esta clausula, el browse se establece a modo fast-edit y todas
las columnas son editables.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain


Return to WhatsNew / Novedades

Who is online

Users browsing this forum: No registered users and 30 guests