Page 1 of 1

New FTDN May/Mayo 2009 (9.05)

Posted: Sat Jun 06, 2009 8:44 am
by Antonio Linares
May 2009
========

* Enhancement: We have greatly enhanced FWH Class TActiveX so now there is no need to use Do(), SetProp()
and GetProp(), though it offers full backwards compatibility

Now you can directly send Messages to the ActiveX object! i.e.:

oRb = oActiveX:AddRibbonBar( "first" )
or
oSettings = oActiveX:GlobalSettings
or
oActiveX:AnyProp = ...

* Class TXBrowse:

(1) Copy and Paste:
- Facility to copy any range of cells from xbrowse and paste into Excel sheet is already available. This
facility is turned on by default and can be turned off by setting oBrw:lAllowCopy to .f..

- Now it is possible to copy any range of cells from Excel and paste into XBrowse. The facility is turned off
by default and can be turned on by setting oBrw:lCanPaste := .t. Copied cells will be converted into the
appropriate data types of the columns.

- Clipboard data is pasted from the selected column to right and selected row to bottom and overflowing rows
and columns in the clipboard data are ignored subject to exceptions in case of Array Browses as explained below.

- If the array being browsed is a blank array, all the rows of the clipboard data are appended the array and
xbrowse is reconfitured for the new columns.

- If browsing an array and oBrw:lAutoAppend == .t. and extreme left column is selected, then if the number of
rows pasted exceed the rows of the array, the additional rows are appended to the array. This is useful for
appending data from Excel to the array being browsed.

- Pasting is done by evaluating oCol:bEditValue with the new value and works when bEditValue is a setget block
( Default blocks provided by TXBrowe automatically are setget blocks). bEditValid and nEditType are ignored.
In case of tables opened in shared mode, rows are locked (by evaluating oBrw:bLock ) before pasting.

(2) Bug Fix: When stretchcol is specified, buttons on EDIT_BUTTON, EDIT_LISTBOX, etc. were blinking. Now fixed.

(3) Fix in method lbuttondown: When bChange is evaluated after a mouseclick, the nColPos data is not updated with
the new position. This is fixed.

* Functions

(4) New DATA lSeekWild. If this data is set to .t., bSeek uses OrdWildSeek instead of normal Seek.

(5) bSeek: If the index is created on Upper(…), cSeek is converted to Upper while seeking.

(6) DatePicker in xBrowse respects the cEditPicture data of the column object.

(7) Bugfixes in post edit cursor movement

(8) Bug fix in method SortArrayData. Sorting on array element higher than the number of columns was resulting in
runtime error. Now fixed.

(9) XBROWSE command: New optional clause [ROWS <aRows>]. While defining xBrowse for RDD or DataBase objects, if
ROWS aRows is specified, where aRows is an array containing RecNos, only the records with those RecNos in that
order are shown in the Browse.

- New optional parameter aRows in methods SetRDD and SetODBF achieve the same purpose.

- New optional parameter <bOnSkip> in SetArray evaluates the codeblock on every skip of the Array Browse. ( similar
to SetTree methods bOnSkip ). This codeblock can be used to link external databases to the array browse. New data
bOnskip of TXBrowse serves the same purpose.

(10) Pressing Enter key on a non-editable column moves the cursor right.

(11) Function XBrowse() / Command XBrowser: In selection mode, selection can be now made by pressing Enter key also.
Incremental seek is implemented.

Improved: uCharToVal( cText, [cType] ). Also changed from module WQout.prg to Valblank.Prg

If ctype is not provided or cType is nil, the function determines the appropriate data type and converts the value.
If second parameter is by reference, the type determined by the function is stored in the second paratmer.

RPreview.Prg:

- If the printer’s data lPrvModal is true, a normal window is created even in MDI environment. Prior to this revision,
in an MDI application, even when print preview is called from a modal dialog, the preview was shown in mdichild,
which was shown behind the dialog.

- New function: RPrevUserBtns( bBtnBlock ) --> bPreviousBtnBlock. User can set a code block which is called by the
RPreview program with two parameters Self, oBar while building the button bar for the preview. In this codeblock,
user can add buttons with actions of his choice.

Example:

RPrevUserBtns( { oPrev, oBar | MyButtons( oPrev, oBar ) }


REPORT oRep PREVIEW
<clauses>
ACTIVATE REPORT oRep
RPrevUserBtns( nil )
*
Function MyButtons( oPreview, oBar )

DEFINE BUTTON OF oBar RESOURCE ‘Save’ ACTION MsgInfo( “Save” )

Return nil



Report.prg:

- When a report is created with MODAL clause, preview is in a normal window (not MDI child), even in MDI application.

- New clause MEMO to COLUMN command. It is now possible to print multi-line text in column by specifying the clause
MEMO or MULTI LINE, without the need for writing extra code in the application program. Please see
fwh\samples\rep20.prg to see the difference in programming before and after 9.05

- New DATA nStrechCol in TReport class:

When a column number is assigned to the data nSretchCol, that column is stretched or shrunk within reasonable
limits to fit the report to the page width.

TDataBase Class: (database.prg)

For Harbour and xHarbour:
- Wildseek capability is added. Seek method now has two additional parameters.
Method Seek( uExpr, lSoft, lWildSeek, lFromCurRec )
If lWildSeek is set to true the functionality is similar to OrdWildSeek( uExpr, lFromCurRec )

- New Method XBrowse( oWnd/oBrw, cTitle, aCols, lautosort, bSetUp ) --> oBrw

- If the first parameter is TXBrowse, the browse is setup with the object

- If the first parameter is a MDI main window, then a new browse is created in a new mdi child window and displayed

- If this parameter is a normal window, the window’s client area is populated with the browse and displayed

TDTPICKER class

New PICTURE clause is added to the command. Picture can be ‘@D’, ‘@E’ or any picture similar to ‘dd-MMMM-yyyy’,
When picture clause is specified, the dtpicker displays the date in the specified format. Otherwise windows
default format is used.

Re: New FTDN May/Mayo 2005 (9.05)

Posted: Mon Jun 08, 2009 3:07 am
by hua
Maybe missing, CUETEXT clause of GET renamed to CUEBANNER

Re: New FTDN May/Mayo 2005 (9.05)

Posted: Mon Jun 08, 2009 4:09 am
by Antonio Linares
Hua,

Yes, thanks :-)

Re: New FTDN May/Mayo 2005 (9.05)

Posted: Mon Jun 08, 2009 4:34 am
by hua
You're welcome. Here's some more :) . The source was changed but it's not mentioned in the whatsnew.txt

\CLASSES\activex.prg
\CLASSES\urllink.prg

Re: New FTDN May/Mayo 2005 (9.05)

Posted: Mon Jun 08, 2009 5:13 am
by Antonio Linares
Hua,

Yes, you are right, thanks :-)

We already commented those changes in the forums:
http://forums.fivetechsupport.com/viewt ... =3&t=15314
http://forums.fivetechsupport.com/viewt ... =3&t=15311

Re: New FTDN May/Mayo 2005 (9.05)

Posted: Mon Jun 08, 2009 5:24 am
by hua
Missed those :) . Thanks for pointing them out.

Re: New FTDN May/Mayo 2005 (9.05)

Posted: Tue Jun 09, 2009 1:30 pm
by Adolfo
Antonio..

Esta nueva version incluye la "NUEVA" RibbonBar nativa de FWH

Alcanza o sera para los siguientes builds...


Desde Chile
Adolfo

Re: New FTDN May/Mayo 2005 (9.05)

Posted: Tue Jun 09, 2009 1:53 pm
by Antonio Linares
Adolfo,

Aún se está trabajando en su desarrollo.

Re: New FTDN May/Mayo 2005 (9.05)

Posted: Tue Jun 09, 2009 3:40 pm
by Manuel Aranda
Ya me gustaría tener 4 años menos, pero ¿no será May/Mayo 2009? :wink:

Re: New FTDN May/Mayo 2009 (9.05)

Posted: Tue Jun 09, 2009 4:54 pm
by Antonio Linares
oido cocina! :-)

gracias

Re: New FTDN May/Mayo 2009 (9.05)

Posted: Thu Jun 11, 2009 7:53 am
by Antonio Linares
Mayo 2009
==========

* Mejora: Hemos mejorado mucho la Clase TActiveX de FWH por lo que ahora no hay necesidad de usar Do(), SetProp() y
GetProp(), aunque mantiene completa compatibilidad con el codigo anterior

Ahora podeis enviarle mensajes directamente al objeto ActiveX, por ejemplo:

oRb = oActiveX:AddRibbonBar( "first" )
or
oSettings = oActiveX:GlobalSettings
or
oActiveX:AnyProp = ...

* Clase TXBrowse:

(1) Copiar y Pegar:

- Ya está disponible la facilidad para copiar un rango de celdas desde un xbrowse y pegarla en una hoja Excel.
Esta facilidad está activada por defecto y se puede desactivar poniendo setting oBrw:lAllowCopy a .f..

- Ahora es posible copiar cualquier rango de celdas de Excel y pegarlo en XBrowse. La facilidad está desactivada
por defecto y se puede activar poniendo oBrw:lCanPaste := .t. Los datos de las celdas copiadas se transformarán
al formato de las columnas.

- Los datos del portapapeles son pegados desde la columna seleccionada hacia la derecha y la fila seleccionada hacia
abajo, y las filas y columnas sobrantes del portapapeles son ignoradas a excepción de "Browses de matrices" como se
explica a continuación.

- Si la matriz mostrada, es una matriz vacía, todas las filas del portapapeles son añadidas a la matriz y el "xbrowse"
se reconfigura con las nuevas columnas.

- Si navegando una matriz y oBrw:lAutoAppend == .t. y la columna izquierda es seleccionada, entonces si el número de
filas a pegar exceden el número de filas de la matriz, las filas adicionales son añadidas a la matriz.Esto es útil
para añdir datos desde Excel a la matriz que se está mostrando.

- El pegado se hace mediante la evaluación de oCol:bEditValue con el nuevo valor y funciona cuando bEditValue es un
bloque setget ( Los bloques por defecto proporcionados automáticamente por TXBrowse son bloques setget ).
bEditValid y nEditType son ignorados. En caso de tablas abiertas en modo compartido, las filas son bloqueadas antes
del pegado ( mediante la evaluación de oBrw:bLock ).

(2) Error corregido: Cuando se especificaba stretchcol, los botones sobre EDIT_BUTTON, EDIT_LISTBOX, etc... parpadeaban.
Ahora corregido.

(3) Corrección en el método lbuttondown: Cuando se evalua bChange despúes de una pulsación del ratón, el dato de
nColPos no se actualiza con la nueva posición. Se ha corregido.

* Funciones

(4) Nueva DATA lSeekWild. Si es puesta a .T., bSeek usa OrdWildSeek en lugar de un Seek normal.

(5) bSeek: Si el índice es creado con mayúsculas, cSeek se convierte a mayúsculas durante la búsqueda.

(6) DatePicker en un xBrowse respeta la data cEditPicture del objeto de la columna.

(7) Correcciones en la edición posterior del movimiento del cursor.

(8) Corrección en el método SortArrayData. Ordenando en una matriz los elementos mayores que el número de columnas
daba lugar a errores en tiempo de ejecución. Ahora corregido.

(9) Comando XBROWSE: Nueva cláusula opcional [ROWS <aRows>]. Mientras definimos un xBrowse para un RDD ó un objeto
DataBase, si se especifica ROWS (es una matriz que contine RecNos), sólo los registrod con aquellos RecNos en
ese orden se mostrarán en el Browse.

- Nuevo parámetro opcional aRows en los métodos SetRDD y SetODBF para lograr el mismo objetivo.

- Nuevo parámetro opcional <bOnSkip> en SetArray, evalua el bloque de código en cada salto en la navegación de la matriz.
Similar al método bOnSkip de SetTree. Este bloque de código se puede usar para enlazar base de datos externas con la matriz.
La nueva DATA bOnSkip de TXBrowse sirve para el mismo objetivo.

(10) Pulsando la tecla ENTER en una columna sin edición mueve el cursor a la derecha.

(11) Función XBrowse() / Comando XBrowser: En modo selección, la selección ahora se puede hacer pulsando la tecla ENTER también.
Se ha implementado la búsqueda incremental.

Mejorado: uCharToVal( cText, [cType] ). También se ha cambiado del módulo WQout.prg a Valblank.Prg

Si no se proporciona cType o es nulo, la función determina el tipo de dato apropiado y convierte el valor. Si el segundo parámetro es por referencia, el tipo determinado por la función se almacena en el segundo parámetro.

RPreview.Prg:

- Si la DATA lPrvModal de la impresora es TRUE, una ventana normal se crea incluso en un entorno MDI. Antes de esta revisión, en una aplicación MDI, incluso cuando una vista previa es llamada desde un diálogo modal, la vista previa se muestra como MDI hija, la cual se muestra detrás del diálogo.

- Nueva función: RPrevUserBtns( bBtnBlock ) --> bPreviousBtnBlock. El usuario puede poner un bloque de código que será llamado por el programa RPreview con dos parámetros: Self y oBar, mientras construye la barra de botones para la vista previa. En este bloque de código el usuario puede añadir botones con acciones de su elección.

Ejemplo:

RPrevUserBtns( { oPrev, oBar | MyButtons( oPrev, oBar ) }


REPORT oRep PREVIEW
<clauses>
ACTIVATE REPORT oRep
RPrevUserBtns( nil )
*
Function MyButtons( oPreview, oBar )

DEFINE BUTTON OF oBar RESOURCE ‘Save’ ACTION MsgInfo( “Save” )

Return nil



Report.prg:

- Cuando se crea un informe con la cláusula MODAL, la vista previa es en una ventana normal ( no en una hija MDI ), incluso
en aplicaciones MDI.

- Nueva cláusula MEMO en el comando COLUMN. Ahora es posible imprimir varias líneas de texto en la columna especificando la
cláusula MEMO ó MULTI LINE, sin necesidad de escribir código adicional en el programa de la aplicación. Por favor, consulte
fwh\samples\rep20.prg para ver la diferencia en la programación antes y después de 9.05

- Nueva DATA nStrechCol en la clase TReport:

Cuando se asigna un número de columna a la data nStretchCol, esa columna se estira o se reduce razonablemente para ajustar el
informe al ancho de la página.

Clase TDataBase: (database.prg)

Para Harbour y xHarbour:

- Se ha añadido la capacidad Wildseek. El método Seek ahora tiene dos parámetros adicionales:

Method Seek( uExpr, lSoft, lWildSeek, lFromCurRec )

Si se pone lWildSeek a TRUE la funcionalidad es similar a OrdWildSeek( uExpr, lFromCurRec )

- Nuevo método XBrowse( oWnd/oBrw, cTitle, aCols, lautosort, bSetUp ) --> oBrw

- Si el primer parámetro es TXBrowse, el "browse" se configura con el objeto.

- Si el primer parámetro es una ventana principal MDI, el nuevo "browse" se crea en una ventana MDI hija y se muestra.

- Si este parámetro es una venta normal, el área cliente de la ventana se rellena con el "browse" y se muestra.

Clase TDTPICKER

Se ha añadido la cláusula PICTURE al comando. La máscara puede ser ‘@D’, ‘@E’ ó cualquier máscara similar a
‘dd-MMMM-yyyy’, cuando se especifica la cláusula máscara, entonces dtpicker mostrará la fecha en el formato
especificado. En caso contrario se usará el formato de Windows por defecto.