Page 2 of 3

Re: XBrowse, ajustar aspecto de las barras de scroll*Solucionado

PostPosted: Wed Jul 08, 2015 1:07 pm
by cnavarro
HAs probado con hb_storvni(

Re: XBrowse, ajustar aspecto de las barras de scroll*Solucionado

PostPosted: Wed Jul 08, 2015 1:26 pm
by AngelSalom
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 view
#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

 
 

Re: XBrowse, ajustar aspecto de las barras de scroll*Solucionado

PostPosted: Wed Jul 08, 2015 1:29 pm
by cnavarro
Cuales te devuelven nil?

Code: Select all  Expand view


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;

 

Re: XBrowse, ajustar aspecto de las barras de scroll*Solucionado

PostPosted: Wed Jul 08, 2015 1:50 pm
by AngelSalom
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 ???

Code: Select all  Expand view
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?

Re: XBrowse, ajustar aspecto de las barras de scroll*Solucionado

PostPosted: Wed Jul 08, 2015 3:02 pm
by cnavarro
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

Code: Select all  Expand view

#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 view

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

 

Re: XBrowse, ajustar aspecto de las barras de scroll*Solucionado

PostPosted: Wed Jul 08, 2015 3:30 pm
by AngelSalom
Curioso, con las funciones por separado ya funcionó perfecto. Gracias por todo!

Re: XBrowse, ajustar aspecto de las barras de scroll*Solucionado

PostPosted: Wed Jul 08, 2015 3:46 pm
by cnavarro
Angel, si puedes pon alguna imagen del control con las modificaciones. Seria de agradecer
Saludos

Re: XBrowse, ajustar aspecto de las barras de scroll*Solucionado

PostPosted: Wed Jul 08, 2015 4:31 pm
by AngelSalom
Por supuesto, ¡qué menos! :D :D

Aquí va el último ejemplo completo :

Code: Select all  Expand view
#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"

Image

Re: XBrowse, ajustar aspecto de las barras de scroll*Solucionado

PostPosted: Wed Jul 08, 2015 5:00 pm
by Biel EA6DD
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.

Re: XBrowse, ajustar aspecto de las barras de scroll*Solucionado

PostPosted: Wed Jul 08, 2015 5:47 pm
by cnavarro
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

Code: Select all  Expand view


// 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 );
   }

 

Re: XBrowse, ajustar aspecto de las barras de scroll*Solucionado

PostPosted: Thu Jul 09, 2015 9:41 am
by AngelSalom
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 :

Code: Select all  Expand view

         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?

Re: XBrowse, ajustar aspecto de las barras de scroll*Solucionado

PostPosted: Thu Jul 09, 2015 10:30 am
by cnavarro
Angel, adjunto las funciones que tengo hechas

Code: Select all  Expand view


//----------------------------------------------------------------------------//

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

Re: XBrowse, ajustar aspecto de las barras de scroll*Solucionado

PostPosted: Thu Jul 09, 2015 10:54 am
by cnavarro
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

Re: XBrowse, ajustar aspecto de las barras de scroll*Solucionado

PostPosted: Thu Jul 09, 2015 1:11 pm
by AngelSalom
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]

Re: XBrowse, ajustar aspecto de las barras de scroll*Solucionado

PostPosted: Thu Jul 09, 2015 1:37 pm
by AngelSalom
Bueno, pues sí que va quedando bien la cosa ... con estos ajustes las aplicaciones FW en tablets con W8 toman otra dimensión :mrgreen: :mrgreen:

Image