New FTDN June/Junio 2008 (8.06)

Post Reply
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

New FTDN June/Junio 2008 (8.06)

Post by Antonio Linares »

June 2008
=======

* Enhancement: Class TActiveX improved used functions OleGetProperty(), OleSetProperty() and OleInvoke(). Please review source\classes\TActiveX.prg

* Fix: Minor change in Class TWBrowse function WBrwLine().

* Enhancement: Class TControl Method HandleEvent() message WM_UPDATEUISTATE, added support for controls TBtnBmp when placed on button bars.

* Enhancement: CLASS TTrayIcon new DATA lSuccess to check if the tray icon was properly set. This allows to perform an oTray:SetIcon() from time to time. If oTray:lSuccess is .F., then I can oTray:End() and oTray:New() again to have the icon reappearing. Thanks to Davide!

* Fix: Class TWindow Method Move( nRow, nCol ) was not properly receiving nRow and nCol parameters. Now it is ok.

* Fix: Shift + Tab is properly working with dropdown comboboxes.
Please test samples\combos.prg

* Enhancement: new Class TTreeView Method GoTop().

* New: Class TRichEdit new methods:

GetIndent() -> It returns an array with left indentation, right indentation and first line indentation referenced to the left margin.
SetIndent( nLeft, nRight, nFirst ) -> Sets the left indentation, right indentation and first line indentation referenced to the left margin.

GetParagraph() -> It returns an array with prior and post spacing of the selected paragraph
SetParagraph( nBefore, nAfter ) -> It sets the prior and post spacing of the selected paragraph

* Fix: Class TBtnBmp, prompts without bitmap in the buttons in button bar are not being vertically centered. Now it is ok.

* Enhancement: Class TXBrowse, minor changes in ArraySort.

* New: samples\EnumChild.prg shows how to implement and use Windows API EnumChildWindows().

* Fix: Class TCBrowse, proper use of codeblocks for colors in DATAs nClrForeFocus and nClrBackFocus.

* Class TXBrowse:

a) Support for inherited classes from commands. XBROWSE commands were invoking TXBrowse():New. As a result, if a programmer implements a derived class, he has to modify the xbrowsenew function in the xbrowse.prg and recompile, if he wants to use the commands.

Now, if he wants his derived class to be used instead of the FWH's original TXBrowse class, he may call the function TXBrows function at the beginning of the program.

Example:

if TXBrwChild is the name of the derived class, the program should begin with TXBrows( {|| TXBrwChild() } ).

Then the commands will invoke the derived class, instead of the parent class.
Also new instances of derived browse class can be instantiated with TXBrows():New() ( not TXBrowse():new() ).

b) xbrowse.ch. Constants DATATTYPE_* are moved from XBrowse.Prg to XBrowse.Ch.

c) Added FOOTERS and FASTEDIT clauses to XBROWSE create command.

d) It is observed from the forums that most users are using horizontal and vertical lines in the browses. The default behaviour of xbrowse is no lines. To facilitate the programmers who use lines and celled browse, two new clauses LINES and CELL are added.

LINES clause draws horizontal lines and vertical lines complete. CELL clause sets the browse Celled browse mode.

e) ADD COLUMN command:
BITMAP clause in command to ADD TO <oBrw> was not working earlier. Now is working fine.

(i) If BITMAP clause is used the expression in the DATA <udata> clause is used as bBmpData instead of bEditValue and bStrData. It is the responsibility of the programmer to ensure the expression evaluates to valid ordinal number in the bitmap array of the column

(ii) BITMAP BMPDATA <expr> ( or column number for arrays ): This expression is used as bBmpData and DATA <expr>/<elem> is treated as bEditValue and bStrData

(iii) BITMAP [BMPDATA <x>] IN <bmp1>, <bmp2>, ... <bmp2> loads bitmaps or resources specified in the command without the need to use the methods AddBmpFile or AddResource.

HIDDEN clause creates the column but hides in when the browse is invoked.

FOOTER <uFooter> clause defines bFooter

TOTAL <nTotal> clause allows <nTotal> to be shown in footers and also lets auto recalculation of totals when the cells in the column are modified by inline edit.

f) System bitmaps to indicate column sort order in the header are now loaded once for the browse instead of loading for each column. This avoids any possibility of confusion in the assignment of ordinal numbers for the bitmaps added by the programmer.

g) Array Sorting: Possible to sort one array column in the order of any other column. After sort, the pointer is positioned again on the same logical array row ( works satisfactorily with unique values in the highlighed column).

h) xbraddcolumn function moved to TXBrowse class as a method. This method is meant only to support command syntax and is not meant to be used directly in the application program.

i) Added support for automatic recalculation and refresh of totals shown in footers for numeric columns. If the column is numeric and bFooter is like { |o,dx| If( dx == nil, nTotal, nTotal += dx ) } or oCol:nFooter is numeric, then when a cell in the column is edited inline, the total in the footer is recalculated and footer refreshed automatically, without any additional code.

When a column is defined with command syntax ( XBROWSE COLUMNS <fiedlnames,...> for RDD, ADO, Array, Objects like TDatabase, or ADD TO oBrw DATA <bSetGet> ) the XBrowse automatically constructs bEditValue, cEditPicture ( except for Objects ) and bOnPostEdit
blocks. The default values serve most purposes, but can be overridden if desired. Either assigning EDIT_GET to oCol:nEditType or EDITBALE clause in ADD TO oBrw command is enough to enable inline edit. If bFooter is defined in the above manner. even display of recomputed totals is automatic.

j) testxbrw3.prg in the samples folder is revised using some of the new command syntax.

k) New Method oCol:SetProgBar( [<nLimt>], [<nWidtj>], [<bClrProgBar>] ) : It is now possible to show percentage of the cell value as a bar. See example xbrprogb.prg in the samples folder.

l) Support for single line Vertical text ( escapements 900 and 2700 ) in headers

m) TXBrwColumn New Data bPaintText: It is observed from the forums that at times programmers would like to paint the data with different features and it may not be possible to provide all of them at the time they need. In such cases, the only choice for the programmer is to hard code the changes in the xbrowse.prg. To facilitate the programmers to quickly implement different ways of painting data bPaintText is provided. If this codeblock is provided, xbrowse calls this codeblock after doing all the preliminary setup and drawing bitmaps if any, After the codeblock is excecuted, xbrowse does the rest of work.

The codeblock is called with the following parameters:
( oCol, hDC, cText, { nTop, nLeft, nBottom, nRight } )
The programmer can paint the data in any manner he prefers within the coordinates provided, using the hDC.

New: aJustify SETGET method is provided.
xbrjustify also remains for backward compatibility

* New: Harbour and xHarbour builds, updated with the most recent svn and cvs files. Important: There are many libraries names changed in Harbour, please review fwh\samples\buildh.bat and update your batch and makefiles.
Last edited by Antonio Linares on Sat Sep 06, 2008 2:16 pm, edited 1 time in total.
regards, saludos

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

Post by Antonio Linares »

Junio 2008
========

* Mejora: En la clase TActiveX se han mejorado las funciones OleGetProperty(), OleSetProperty() y OleInvoke(). Por favor, revisa el código fuente en source\classes\TActiveX.prg

* Corrección: Cambio menor en la función WBrwLine() de la clase TWBrowse.

* Mejora: En la clase TControl, en el método HandleEvent() se ha añadido el mensaje WM_UPDATEUISTATE para soportar la colocación de controles
TBtnBmp en barras de botones.

* Mejora: En la clase TTrayIcon nuevo DATA lSuccess para comprobar si el icono aparece en la barra de sistema. Esto permite hacer
oTray:SetIcon() cada cierto tiempo. Si oTray:lSuccess es .F., entonces podemos hacer oTray:End() y oTray:New() para que reaparezca el icono
en la barra de sistema. Gracias a Davide!

* Corrección: El método Move( nRow, nCol ) de la clase TWindow, no recibía bien los parámetros nRow y nCol. Ahora sí lo hace.

* Corrección: La pulsación de las teclas Shift + Tab funciona correctamente con "Combos" desplegables. Por favor, pruebe el ejemplo
\FWH\samples\combos.prg

* Mejora: Nuevo método GoTop() en la clase TTreeView.

* Nuevo: Nuevos métodos en la clase TRichEdit:

GetIndent() -> Devuelve una matriz con la sangría izquierda, la sangría derecha y la primera línea de sangría referenciada al margen izquierdo.

SetIndent( nLeft, nRight, nFirst ) -> Pone la sangría izquierda, la sangría derecha y la primera línea de sangría referenciada al margen izquierdo.
GetParagraph() -> Devuelve una matriz con el espaciado anterior y posterior al párrafo seleccionado.
SetParagraph( nBefore, nAfter ) -> Pone el espaciado anterior y posterior al párrafo seleccionado.

* Corrección: En la clase TBtnBmp, no mostraba los "bitmaps" en los botones de la barra de botones si estos nos estaban centrados
verticalmente. Ahora lo hace correctamente.

* Mejora: Cambios menores en ArraySort en la clase TXBrowse.

* Nuevo: El ejemplo samples\EnumChild.prg muestra como implementar y usar la función EnumChildWindows() del API de Windows.

* Corrección: En la clase TCBrowse, uso adecuado de bloques de código para los colores en las DATAs nClrForeFocus y nClrBackFocus.

* Mejoras y correcciones en la clase TXBrowse:

a) Soporte para las clases heredadas en los comandos. Los comandos XBROWSE estaban llamando a TXBrowse():New. Como resultado, si un
programador implementa una clase derivada, tiene que modificar la función XbrowseNew() en el código fuente de xbrowse.prg y reconstruir, si quiere usar comandos.

Ahora, si quiere que se usen sus clases derivadas en lugar de la TXBrowse original de FWH, debe llamar a la función TXBrows() al
principio del programa.

Ejemplo:

Si TXBrwChild es el nombre de la clase derivada, el programa debería comenzar con TXBrows( {|| TXBrwChild() } ).

Entonces el comando llamará a la clase derivada, en lugar de a la clase padre.
También nuevas instancias de clases derivadas pueden ser instanciadas con TXBrows():New() nunca con TXBrowse():new().

b) Las constantes DATATTYPE_* se han movido de \FWH\SOURCE\CLASSES\xbrowse.prg a \FWH\INCLUDE\xbrowse.ch

c) Añadidas las clausulas FOOTERS y FASTEDIT al comando "create" de XBROWSE.

d) Se observa en los foros que la mayoría de los usuarios están usando líneas horizontales y verticales en los "browses".
El comportamiento por defecto de xbrowse es sín líneas. Para facilitar la vida a los programadores qusan líneas y celdas, se han añadido las nuevas clausulas LINES y CELL.

La clausula LINES dibuja líneas horizontales y verticales completas. La clausula CELL pone la celda del "browse" en modo "browse".

e) Comando ADD COLUMN:

La clausula BITMAP en el comando ADD TO <oBrw> no estaba funcionando. Ahora funciona correctamente.

(i) Si la clausula BITMAP se usa, la expresión DATA <udata> es usada como bBmpData en lugarr de bEditValue y bStrData.
Es responsabilidad del programador el asegurar la evaluación de la expresión para validar un número ordinal en la matriz de "bitmaps" de la columna.

(ii) BITMAP BMPDATA <expr> ( ó número de columna para las matrices ): Esta expresión es usada como bBmpData y DATA <expr>/<elem> es tratada como bEditValue y bStrData.

(iii) BITMAP [BMPDATA <x>] IN <bmp1>, <bmp2>, ... <bmp2> carga los "bitmaps" o recursos especificados en el comando sin la necesidad
de usar los métodos AddBmpFile ó AddResource.

HIDDEN, esta clausula crea la columna pero la oculta cuando se llama al "browse".
FOOTER <uFooter>, esta clausula define bFooter.
TOTAL <nTotal>, esta clausula permite que <nTotal> sea mostrado en los pies y también permite recáculo automático de los totales
cuando las celdas son modificadas por el editor en línea.

f) Sistema de "bitmaps" para indicar la columna de ordenación en la cabecera son cargados una vez por el "browse" en lugar de cargarlo
para cada columna. Esto evita cualquier posibilidad de confusión en la asignación de números ordinales para los "bitmaps" añadidos por el programador.

g) Ordenación de matrices: Posibilidad de ordenar una columna de matrices en el orden de cualquier otra columna. Después de la
ordenación, el puntero se posiciona de nuevo en la misma fila lógica de la matriz ( funciona satisfactoriamente con valores únicos en la columna más alta ).

h) La función XbrAddColumn() se ha movido a la clase TXBrowse como método. Este método es sólo para soportar la sintáxis de comandos
y no para ser usado directamente en el programa de aplicación.

i) Se ha añadido soporte para el recálculo y refresco automático de los totales en los pies de las columnas numéricas. Si la columna
es numérica y bFooter es como { |o,dx| If( dx == nil, nTotal, nTotal += dx ) } ó oCol:nFooter es numérico, entonces cuando una
celda en la columna es editada en línea, el total en el pie es recalculado y el pie se refresca automáticamente, sin ningún
código adicional.

Cuando una columna se define con la sintáxis ( XBROWSE COLUMNS <fiedlnames,...> para RDD, ADO, Array, Objects como TDatabase, ó
ADD TO oBrw DATA <bSetGet> ) el XBrowse automáticamente construye los bloques bEditValue, cEditPicture ( excepto para objetos )
y bOnPostEdit.
Los valores por defecto sirven para la mayoría de propósitos, pero pueden sobrescribirse si se desea. Cualquiera asignando EDIT_GET
a oCol:nEditType ó la clausula EDITBALE en el comando ADD TO oBrw, es suficiente para activar la edición en línea. Si bFooter es
definida en la forma anterior, incluso la visualización de los totales se recalcula automáticamente.

j) Se ha revisado el ejemplo testxbrw3.prg de la carpeta \FWH\samplesusando la sintáxis de alguno de los nuevos comandos.

k) Nuevo método oCol:SetProgBar( [<nLimt>], [<nWidtj>], [<bClrProgBar>] ) : Ahora es posible el mostrar el porcentaje del valor de
la celda como una barra de progreso. Ver el ejemplo xbrprogb.prg en la carpeta \FWH\samples.

l) Soporte para líneas simples de texto vertical en las cabeceras.

m) Nuevo DATA bPaintText en la clase TXBrwColumn: Se observa en los foros que a veces a los programadores les gustaría pintar los datos
con diferentes características y puede que no sea posible el proporcionarlas todas al mismo tiempo que se necesitan. En tales casos,
la única posibilidad para el programador es cambiar el código fuente en xbrowse.prg. Para facilitar la vida a los programdores
implementando rápidamente diferentes maneras de pintado de los datos se proporciona bPaintText. Si se proporciona este bloque de
código, xbrowse llama a este bloque de código después de todos los preliminares de configuración y dibujado de "bitmaps". Después
de ejecutar el bloque de código, xbrowse hace el resto del trabajo.

El bloque de código es llamado con los siguientes parámetros:

( oCol, hDC, cText, { nTop, nLeft, nBottom, nRight } )

El programador puede pintar los datos de cualquier manera que prefiera dentro de las coordinadas proporcionadas, usando el hDC.

Nuevo: Se proporciona el método aJustify SETGET. Se mantiene xbrjustify por compatibilidad con versiones anteriores.

* Nuevo: Nuevas construcciones de Harbour y xHarbour, actualizadas con los ficheros (cvs y svn) más recientes. IMPORTANTE: Hay muchos nombres de librerías en Harbour que han cambiado, por favor revisa \FWH\samples\buildh.bat y actualiza tus ficheros por lotes y makefiles.
regards, saludos

Antonio Linares
www.fivetechsoft.com
Post Reply