XBrowse, ajustar aspecto de las barras de scroll*Solucionado
Re: XBrowse, ajustar aspecto de las barras de scroll*Solucionado
HAs probado con hb_storvni(
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
- AngelSalom
- Posts: 727
- Joined: Fri Oct 07, 2005 7:38 am
- Location: Benicarló (Castellón ) - España
- Has thanked: 1 time
- Contact:
Re: XBrowse, ajustar aspecto de las barras de scroll*Solucionado
Si, he llegado a esa conclusión pero lo curioso es que me devuelve un array de dos elementos y con valores NIL. Copio de nuevo el ejemplo modificado.
Code: Select all | Expand
#include "fivewin.ch"
#include "xbrowse.ch"
Function Main()
Local oDlg, oBrw, aValues:={}, nC
DEFINE DIALOG oDlg SIZE 300, 200
@ 0, 0 XBROWSE oBrw OF oDlg ARRAY { { "one","two","three" } } AUTOCOLS
oBrw:CreateFromCode()
ACTIVATE DIALOG oDlg CENTER ON INIT ( oDlg:oClient := oBrw, oDlg:Resize(), aValues:=NonClient (25,25,20,20) )
For nC:=1 to len (avalues)
msginfo (avalues[nc])
next
Return (nil)
#pragma BEGINDUMP
#include "windows.h"
#include "hbapi.h"
#include "hbcomp.h"
HB_FUNC ( NONCLIENT )
{
NONCLIENTMETRICS mi;
memset( ( char * ) &mi, 0, sizeof( NONCLIENTMETRICS ) );
mi.cbSize = sizeof( NONCLIENTMETRICS );
SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &mi, 0);
// Devuelvo un array con los valores antes de cambiarlos
hb_reta(4);
hb_storvni(mi.iScrollWidth, -1, 1);
hb_storvni(mi.iScrollHeight,-1, 2);
hb_storvni(mi.iCaptionHeight, -1, 3);
hb_storvni(mi.iMenuHeight, -1, 4);
// Grabar el valor
mi.iScrollWidth = hb_parnl( 1 );
mi.iScrollHeight = hb_parnl( 2 );
mi.iCaptionHeight = hb_parnl ( 3 );
mi.iMenuHeight = hb_parnl ( 4 );
SystemParametersInfo( SPI_SETNONCLIENTMETRICS, sizeof( mi ), &mi, 0 ); //SPIF_SENDCHANGE); // Update Win.ini
}
#pragma ENDDUMP
Angel Salom
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
Re: XBrowse, ajustar aspecto de las barras de scroll*Solucionado
Cuales te devuelven nil?
Code: Select all | Expand
typedef struct tagNONCLIENTMETRICS {
UINT cbSize;
int iBorderWidth;
int iScrollWidth;
int iScrollHeight;
int iCaptionWidth;
int iCaptionHeight;
LOGFONT lfCaptionFont;
int iSmCaptionWidth;
int iSmCaptionHeight;
LOGFONT lfSmCaptionFont;
int iMenuWidth;
int iMenuHeight;
LOGFONT lfMenuFont;
LOGFONT lfStatusFont;
LOGFONT lfMessageFont;
#if (WINVER >= 0x0600)
int iPaddedBorderWidth;
#endif
} NONCLIENTMETRICS, *PNONCLIENTMETRICS, *LPNONCLIENTMETRICS;
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
- AngelSalom
- Posts: 727
- Joined: Fri Oct 07, 2005 7:38 am
- Location: Benicarló (Castellón ) - España
- Has thanked: 1 time
- Contact:
Re: XBrowse, ajustar aspecto de las barras de scroll*Solucionado
Cristóbal, no me aclaro demasiado ... ¿con este código no debería cargar y devolver un array de cuatro valores con mi.iScrollWidth, mi.iScrollHeight, mi.iCaptionHeight y mi.iMenuHeight ???
a eso me refiero cuando digo que me devuelve un array únicamente con 2 elementos y los dos a NIL. Quizás me esté confundiendo y lo que recibo es la estructura que comentas?
Code: Select all | Expand
hb_reta(4);
hb_storvni(mi.iScrollWidth, -1, 1);
hb_storvni(mi.iScrollHeight,-1, 2);
hb_storvni(mi.iCaptionHeight, -1, 3);
hb_storvni(mi.iMenuHeight, -1, 4);
a eso me refiero cuando digo que me devuelve un array únicamente con 2 elementos y los dos a NIL. Quizás me esté confundiendo y lo que recibo es la estructura que comentas?
Angel Salom
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
Re: XBrowse, ajustar aspecto de las barras de scroll*Solucionado
Angel, tal y como lo tienes a mi me devuelve el array con los 4 valores correctos, pero prueba a realizar dos funciones: una para el Get y otra para el Set
O sea, una function
y otra
O sea, una function
Code: Select all | Expand
#pragma BEGINDUMP
#include "windows.h"
#include "hbapi.h"
#include "hbcomp.h"
HB_FUNC ( NONCLIENTGET )
{
NONCLIENTMETRICS mi;
memset( ( char * ) &mi, 0, sizeof( NONCLIENTMETRICS ) );
mi.cbSize = sizeof( NONCLIENTMETRICS );
SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &mi, 0);
// Devuelvo un array con los valores antes de cambiarlos
hb_reta(4);
hb_storvni(mi.iScrollWidth, -1, 1);
hb_storvni(mi.iScrollHeight,-1, 2);
hb_storvni(mi.iCaptionHeight, -1, 3);
hb_storvni(mi.iMenuHeight, -1, 4);
}
y otra
Code: Select all | Expand
HB_FUNC ( NONCLIENTSET )
{
NONCLIENTMETRICS mi;
memset( ( char * ) &mi, 0, sizeof( NONCLIENTMETRICS ) );
mi.cbSize = sizeof( NONCLIENTMETRICS );
SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &mi, 0);
// Grabar el valor
mi.iScrollWidth = hb_parnl( 1 );
mi.iScrollHeight = hb_parnl( 2 );
mi.iCaptionHeight = hb_parnl ( 3 );
mi.iMenuHeight = hb_parnl ( 4 );
SystemParametersInfo( SPI_SETNONCLIENTMETRICS, sizeof( mi ), &mi, 0 ); //SPIF_SENDCHANGE); // Update Win.ini
}
#pragma ENDDUMP
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
- AngelSalom
- Posts: 727
- Joined: Fri Oct 07, 2005 7:38 am
- Location: Benicarló (Castellón ) - España
- Has thanked: 1 time
- Contact:
Re: XBrowse, ajustar aspecto de las barras de scroll*Solucionado
Curioso, con las funciones por separado ya funcionó perfecto. Gracias por todo!
Angel Salom
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
Re: XBrowse, ajustar aspecto de las barras de scroll*Solucionado
Angel, si puedes pon alguna imagen del control con las modificaciones. Seria de agradecer
Saludos
Saludos
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
- AngelSalom
- Posts: 727
- Joined: Fri Oct 07, 2005 7:38 am
- Location: Benicarló (Castellón ) - España
- Has thanked: 1 time
- Contact:
Re: XBrowse, ajustar aspecto de las barras de scroll*Solucionado
Por supuesto, ¡qué menos!
Aquí va el último ejemplo completo :
Y aquí la imagen del diálogo "transformado"



Aquí va el último ejemplo completo :
Code: Select all | Expand
#include "fivewin.ch"
#include "xbrowse.ch"
Function Main()
Local oDlg, oBrw, aValues:={}, nC
DEFINE DIALOG oDlg SIZE 300, 200 TITLE "Probando redimensión de scroll y captions"
@ 0, 0 XBROWSE oBrw OF oDlg ARRAY { { "one","two","three" } } AUTOCOLS
oBrw:CreateFromCode()
ACTIVATE DIALOG oDlg CENTER ON INIT ( oDlg:oClient := oBrw, oDlg:Resize(), aValues:=NonClientGet (), NonClientSet (30,30,50,50) )
NonClientSet (aValues[1],aValues[2],aValues[3],aValues[4])
Return (nil)
#pragma BEGINDUMP
#include "windows.h"
#include "hbapi.h"
#include "hbcomp.h"
#pragma BEGINDUMP
#include "windows.h"
#include "hbapi.h"
#include "hbcomp.h"
HB_FUNC ( NONCLIENTGET )
{
NONCLIENTMETRICS mi;
memset( ( char * ) &mi, 0, sizeof( NONCLIENTMETRICS ) );
mi.cbSize = sizeof( NONCLIENTMETRICS );
SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &mi, 0);
// Devuelvo un array con los valores antes de cambiarlos
hb_reta(4);
hb_storvni(mi.iScrollWidth, -1, 1);
hb_storvni(mi.iScrollHeight,-1, 2);
hb_storvni(mi.iCaptionHeight, -1, 3);
hb_storvni(mi.iMenuHeight, -1, 4);
}
HB_FUNC ( NONCLIENTSET )
{
NONCLIENTMETRICS mi;
memset( ( char * ) &mi, 0, sizeof( NONCLIENTMETRICS ) );
mi.cbSize = sizeof( NONCLIENTMETRICS );
SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &mi, 0);
// Grabar el valor
mi.iScrollWidth = hb_parnl( 1 );
mi.iScrollHeight = hb_parnl( 2 );
mi.iCaptionHeight = hb_parnl ( 3 );
mi.iMenuHeight = hb_parnl ( 4 );
SystemParametersInfo( SPI_SETNONCLIENTMETRICS, sizeof( mi ), &mi, 0 ); //SPIF_SENDCHANGE); // Update Win.ini
}
#pragma ENDDUMP
Y aquí la imagen del diálogo "transformado"

Angel Salom
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
- Biel EA6DD
- Posts: 682
- Joined: Tue Feb 14, 2006 9:48 am
- Location: Mallorca
- Contact:
Re: XBrowse, ajustar aspecto de las barras de scroll*Solucionado
Super, buen aporte Cristobal, y gracias por el ejemplo de la implementación Angel.
Yo hasta la fecha lo hacia modificando los valores del registro, pero es mucho más elegante el poder hacerlo desde la propia aplicación, gracias a ambos.
Yo hasta la fecha lo hacia modificando los valores del registro, pero es mucho más elegante el poder hacerlo desde la propia aplicación, gracias a ambos.
Re: XBrowse, ajustar aspecto de las barras de scroll*Solucionado
Angel, genial
Quizás habría que usar hb_parni y hacer que devuelva o grabe solo el parámetro deseado
Ariel, como comentó Angel al principio del hilo, es fundamental para los dispositivos táctiles
Desde que me puse con Fivetouch, que sí lo contempla, son detalles que me han interesado enormemente ya que las aplicaciones Fwh "vuelan" en las tablets Windows pero a nivel funcional dejaban un poco que desear por el tamaño de algunos controles.
Ahora toca modificar el font del caption de los dialogos, no?, por ejemplo
A ver si alguien se anima
Quizás habría que usar hb_parni y hacer que devuelva o grabe solo el parámetro deseado
Ariel, como comentó Angel al principio del hilo, es fundamental para los dispositivos táctiles
Desde que me puse con Fivetouch, que sí lo contempla, son detalles que me han interesado enormemente ya que las aplicaciones Fwh "vuelan" en las tablets Windows pero a nivel funcional dejaban un poco que desear por el tamaño de algunos controles.
Ahora toca modificar el font del caption de los dialogos, no?, por ejemplo
A ver si alguien se anima
Code: Select all | Expand
// Algo asi
#ifdef _WIN64
LONG nPos = hb_parnll( 1 );
#else
LONG nPos = hb_parnl( 1 );
#endif
NONCLIENTMETRICS mi;
memset( ( char * ) &mi, 0, sizeof( NONCLIENTMETRICS ) );
mi.cbSize = sizeof( NONCLIENTMETRICS );
SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &mi, 0);
switch( nPos )
{
case 1:
hb_retni( mi.iBorderWidth );
break;
case 2:
hb_retni( mi.iScrollWidth );
case 3:
hb_retni( mi.iScrollHeight );
case 4:
hb_retni( mi.iCaptionWidth );
case 5:
hb_retni( mi.iCaptionHeight );
case 6:
hb_retni( mi.iSmCaptionWidth );
case 7:
hb_retni( mi.iSmCaptionHeight );
case 8:
hb_retni( mi.iMenuWidth );
case 9:
hb_retni( mi.iMenuHeight );
}
Last edited by cnavarro on Thu Jul 09, 2015 3:02 pm, edited 1 time in total.
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
- AngelSalom
- Posts: 727
- Joined: Fri Oct 07, 2005 7:38 am
- Location: Benicarló (Castellón ) - España
- Has thanked: 1 time
- Contact:
Re: XBrowse, ajustar aspecto de las barras de scroll*Solucionado
Bien, no es complicado modificar el tipo de letra ahora que ya tenemos a estructura. Esto devuelve un array con algunos datos de la fuente actual :
Ya es cuestión de hacer la función que, ya puestos, me pongo a acabarla y mejorarla como sugiere Cristóbal.
Por cierto, ¿cómo le paso un array desde harbour a la función en C? ... de este modo para ajustar la fuente se le podría pasar NonClientPutOptions ( [nOpcion], nValor, {"Fuente",nAlto,nAncho}) ... ¿qué os parece?
Code: Select all | Expand
hb_reta(3);
hb_storvc (mi.lfCaptionFont.lfFaceName, -1, 1);
hb_storvni (mi.lfCaptionFont.lfHeight, -1, 2);
hb_storvni (mi.lfCaptionFont.lfWidth, -1, 3);
break;
Ya es cuestión de hacer la función que, ya puestos, me pongo a acabarla y mejorarla como sugiere Cristóbal.
Por cierto, ¿cómo le paso un array desde harbour a la función en C? ... de este modo para ajustar la fuente se le podría pasar NonClientPutOptions ( [nOpcion], nValor, {"Fuente",nAlto,nAncho}) ... ¿qué os parece?
Angel Salom
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
Re: XBrowse, ajustar aspecto de las barras de scroll*Solucionado
Angel, adjunto las funciones que tengo hechas
Como hay en la struct varias LOGFONT, la function puede ser generica y hacerla con un switch
Code: Select all | Expand
//----------------------------------------------------------------------------//
HB_FUNC ( NONCLIENT )
{
NONCLIENTMETRICS mi;
memset( ( char * ) &mi, 0, sizeof( NONCLIENTMETRICS ) );
mi.cbSize = sizeof( NONCLIENTMETRICS );
SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &mi, 0);
#if (WINVER >= 0x0600)
hb_reta(10);
#else
hb_reta(9);
#endif
hb_storvni(mi.iBorderWidth, -1, 1); // 5
hb_storvni(mi.iScrollWidth, -1, 2); //17
hb_storvni(mi.iScrollHeight,-1, 3); //17
hb_storvni(mi.iCaptionWidth, -1, 4); //36
hb_storvni(mi.iCaptionHeight, -1, 5); //22
hb_storvni(mi.iSmCaptionWidth, -1, 6); //22
hb_storvni(mi.iSmCaptionHeight, -1, 7); //22
hb_storvni(mi.iMenuWidth, -1, 8); //19
hb_storvni(mi.iMenuHeight, -1, 9); //19
#if (WINVER >= 0x0600)
hb_storvni(mi.iPaddedBorderWidth, -1, 10); // 0
#endif
}
//----------------------------------------------------------------------------//
HB_FUNC ( GETNONCLIENT ) // nPos
{
INT nPos = hb_parni( 1 );
INT nVal;
NONCLIENTMETRICS mi;
memset( ( char * ) &mi, 0, sizeof( NONCLIENTMETRICS ) );
mi.cbSize = sizeof( NONCLIENTMETRICS );
SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &mi, 0);
switch( nPos )
{
case 1:
nVal = mi.iBorderWidth;
break;
case 2:
nVal = mi.iScrollWidth;
break;
case 3:
nVal = mi.iScrollHeight;
break;
case 4:
nVal = mi.iCaptionWidth;
break;
case 5:
nVal = mi.iCaptionHeight;
break;
case 6:
nVal = mi.iSmCaptionWidth;
break;
case 7:
nVal = mi.iSmCaptionHeight;
break;
case 8:
nVal = mi.iMenuWidth;
break;
case 9:
nVal = mi.iMenuHeight;
break;
}
hb_retni( nVal );
}
//----------------------------------------------------------------------------//
HB_FUNC ( SETNONCLIENT ) // nPos , uVal, ActWinIni
{
INT nPos = hb_parni( 1 );
INT nVal = hb_parni( 2 );
BOOL bActIni = hb_parl( 3 );
NONCLIENTMETRICS mi;
memset( ( char * ) &mi, 0, sizeof( NONCLIENTMETRICS ) );
mi.cbSize = sizeof( NONCLIENTMETRICS );
SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &mi, 0);
switch( nPos )
{
case 0: // Actualizar todo
//mi.iBorderWidth = nVal;
mi.iScrollWidth = nVal+12;
mi.iScrollHeight = nVal+12;
mi.iCaptionWidth = nVal+21;
mi.iCaptionHeight = nVal+17;
mi.iSmCaptionWidth = nVal+17;
mi.iSmCaptionHeight = nVal+17;
mi.iMenuWidth = nVal+12;
mi.iMenuHeight = nVal+12;
break;
case 1:
mi.iBorderWidth = nVal;
break;
case 2:
mi.iScrollWidth = nVal;
break;
case 3:
mi.iScrollHeight = nVal;
break;
case 4:
mi.iCaptionWidth = nVal;
break;
case 5:
mi.iCaptionHeight = nVal;
break;
case 6:
mi.iSmCaptionWidth = nVal;
break;
case 7:
mi.iSmCaptionHeight = nVal;
break;
case 8:
mi.iMenuWidth = nVal;
break;
case 9:
mi.iMenuHeight = nVal;
break;
}
if ( bActIni )
SystemParametersInfo( SPI_SETNONCLIENTMETRICS, sizeof( mi ), &mi, SPIF_SENDCHANGE); // Update Win.ini
else
SystemParametersInfo( SPI_SETNONCLIENTMETRICS, sizeof( mi ), &mi, 0 ); // NO Update Win.ini
}
//----------------------------------------------------------------------------//
Como hay en la struct varias LOGFONT, la function puede ser generica y hacerla con un switch
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
Re: XBrowse, ajustar aspecto de las barras de scroll*Solucionado
AngelSalom wrote:Bien, no es complicado modificar el tipo de letra ahora que ya tenemos a estructura. Esto devuelve un array con algunos datos de la fuente actual :
Por cierto, ¿cómo le paso un array desde harbour a la función en C? ... de este modo para ajustar la fuente se le podría pasar NonClientPutOptions ( [nOpcion], nValor, {"Fuente",nAlto,nAncho}) ... ¿qué os parece?
Angel,
viewtopic.php?f=3&t=19703&p=103914&hilit=parameter+array+a+function+c#p103915
Aunque creo que no era lo que preguntabas
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
- AngelSalom
- Posts: 727
- Joined: Fri Oct 07, 2005 7:38 am
- Location: Benicarló (Castellón ) - España
- Has thanked: 1 time
- Contact:
Re: XBrowse, ajustar aspecto de las barras de scroll*Solucionado
Si,si. Eso era lo que necesitaba saber. Así para definir el tipo de letra le enviaré a la función un array con ["nombre",alto,ancho]
Angel Salom
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
- AngelSalom
- Posts: 727
- Joined: Fri Oct 07, 2005 7:38 am
- Location: Benicarló (Castellón ) - España
- Has thanked: 1 time
- Contact:
Re: XBrowse, ajustar aspecto de las barras de scroll*Solucionado
Bueno, pues sí que va quedando bien la cosa ... con estos ajustes las aplicaciones FW en tablets con W8 toman otra dimensión




Angel Salom
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4