HAs probado con hb_storvni(
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
HAs probado con hb_storvni(
#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 ENDDUMPtypedef 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;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);#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 ENDDUMPCurioso, con las funciones por separado ya funcion贸 perfecto. Gracias por todo!
Angel, si puedes pon alguna imagen del control con las modificaciones. Seria de agradecer
Saludos
#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
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.
// 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 );
聽 聽}
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;//----------------------------------------------------------------------------//
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
}
//----------------------------------------------------------------------------//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?
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]
