Quiero dimensionar una WINDOW en base a la longitud de una cadena.
He encontrado las siguientes funciones GETTEXTWIDTH y GETTEXTHEIGHT por el foro y he probado a utilizarlas de diferentes maneras, pero siempre obtengo el mismo resultado.
En mi caso no me tiene en cuenta el SIZE de la FUENTE y la longitud de la cadena siempre es la misma.
nAnchoBox:=(GETTEXTWIDTH ( nil,"cadena", hFont))
Tambien he incorporado estas lineas, obtenidas del foro, y al compilar me dan un monton de advertencias.?¿?¿
Code: Select all
#include "hmg.ch"
#pragma BEGINDUMP
#include <windows.h>
// Create logical font and select into DC (device context)
// Must use DelectObject to destroy the logical font
HB_FUNC( CREATELOGFONT )
{
HDC hDC = hb_parnl( 1 );
const char * FontName = hb_parc( 2 );
int FontSize = hb_parni( 3 );
BOOL lBold = hb_parl( 4 );
DWORD lItalic = (DWORD) hb_parl( 5 );
int fnWeight = ( lBold ? FW_BOLD : FW_NORMAL );
long FontHeight; HFONT hxfont;
FontHeight = -MulDiv( FontSize, GetDeviceCaps( hDC, LOGPIXELSY ), 72 );
hxfont =
CreateFont( FontHeight, 0, 0, 0, fnWeight, lItalic, 0, 0,
DEFAULT_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY, FF_DONTCARE, FontName );
hb_retnl( (LONG) hxfont );
}
#pragma ENDDUMP
PROCEDURE Main()
DEFINE WINDOW JM_BOX ;
AT 0, 0 ;
WIDTH 400 HEIGHT 250 ;
TITLE "LONGITUD CADENA" ;
MODAL NOSIZE NOSYSMENU ;
ON INIT Probatura()
ON KEY ESCAPE ACTION JM_BOX.Release
@ 10,10 LABEL Say_1 VALUE "" TRANSPARENT WIDTH 400
END WINDOW
* CENTER WINDOW JM_BOX
JM_BOX.Activate
RETURN
STATIC FUNCTION Probatura
LOCAL xletra:={"Arial","Courier","Times New Roman"}
LOCAL xTam:={8,10,12,14,16}
LOCAL N,M, hFont
LOCAL cMsg:="SELECCIONE UNA EMPRESA"
JM_Box.Say_1.Value:=cMsg
FOR N=1 TO 3
JM_Box.Say_1.FontName :=xLetra[n]
FOR M=1 TO 5
hFont := CreateLogFont( nil,xLetra[n],xTam[m],.f.,.f.)
nAnchoBox:=(GETTEXTWIDTH ( nil,cMsg, hFont))
JM_Box.Say_1.FontSize:=xTam[M]
JM_BOX.Say_1.Refresh
MSGBOX(cMsg+" Font "+xLetra[n]+" Size "+str(xTam[m])+" LONGITUD :"+str(nAnchoBox),"Len Cadena")
NEXT
NEXT
RETURN