Mauricio,
Esa es muy fácil, puedes usar la función del API
GetTextExtentPoint32(), el primer parámetro es el Handle del dispositivo (pantalla o impresora), el segundo es la cadena, el tercero la longitud de caracteres que quieres procesar y el cuarto es el array donde se almacenarán los valores:
Para la pantalla, usaremos como dispositivo un form cualquiera que uses, le asignamos la fuente que queremos y calculamos:
Código:
local nSize, lBold, cCadena, aSize[ 2 ]
cCadena := "Texto de la cadena"
nSize := oForm:Font:Size // Salvamos el tamaño anterior
lBold := oForm:Font:Bold // Salvamos el estilo anterior
oForm:Font:Size := 24 // Asignamos el nuevo tamaño
oForm:Font:Bold := .T.
GetTextExtentPoint32( oForm:Handle, cCadena, Len( cCadena ), aSize ) // aSize contiene la anchura y la altura
oForm:Font:Size := nSize // Restauramos el tamaño anterior
oForm:Font:Bold := lBold // Restauramos el estilo anterior
Para la impresora, asignamos los valores a la fuente y procedemos igual:
Código:
local nSize, lBold, cCadena, aSize[ 2 ]
cCadena := "Texto de la cadena"
nSize := Printer:Font:Size // Salvamos el tamaño anterior
lBold := Printer:Font:Bold // Salvamos el estilo anterior
Printer:Font:Size := 24 // Asignamos el nuevo tamaño
Printer:Font:Bold := .T.
GetTextExtentPoint32( Printer:Handle, cCadena, Len( cCadena ), aSize ) // aSize contiene la anchura y la altura
Printer:Font:Size := nSize // Restauramos el tamaño anterior
Printer:Font:Bold := lBold // Restauramos el estilo anterior
Para el caso de la impresora, la propiedad
Handle es válida si ya inicializado un documento con
BeginDoc() y
NewPage()