Fecha actual Mié Jun 26, 2024 11:56 am

Todos los horarios son UTC + 1 hora [ DST ]




Nuevo tema Responder al tema  [ 5 mensajes ] 
Autor Mensaje
NotaPublicado: Vie Nov 10, 2006 5:11 am 

Registrado: Vie Oct 07, 2005 6:15 pm
Mensajes: 72
Hola ...

A quien pueda responder esta pregunta.

Hay manera en C3 de determinar el ancho y alto en pixeles de una cadena de texto tomando en cuenta atributos como tipo de fuente utilizada tamaño italica bold, etc? tanto dimensiones en pantalla como en impresora? como las funciones textwidth y textheight de otros lenguajes.

Por favor si alguien tiene un comentario que me pueda ayudar

GRACIAS

Mauricio


Arriba
 Perfil  
Responder citando  
 Asunto:
NotaPublicado: Vie Nov 10, 2006 9:29 am 
Avatar de Usuario

Registrado: Vie Oct 14, 2005 12:50 pm
Mensajes: 78
Ubicación: Girona
Mauricio,


siempre puedes crearte un Label AutoSize, NO Visible con las características que necesites obtener... Nombre de fuente, tamaño bold si/no, etc... y de ahí obtener las dimensiones Width i Height.

Espero te sirva.

_________________
Un Saludo,
Xevi.


Arriba
 Perfil  
Responder citando  
 Asunto:
NotaPublicado: Vie Nov 10, 2006 10:09 am 
Site Admin
Avatar de Usuario

Registrado: Jue Oct 06, 2005 10:49 pm
Mensajes: 655
Ubicación: España - Salamanca
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()

_________________
Un saludo,
Bruno Cantero
www.c3compiler.com


Arriba
 Perfil  
Responder citando  
NotaPublicado: Sab Nov 11, 2006 4:22 pm 

Registrado: Vie Oct 07, 2005 6:15 pm
Mensajes: 72
Xevi escribió:
Mauricio,


siempre puedes crearte un Label AutoSize, NO Visible con las características que necesites obtener... Nombre de fuente, tamaño bold si/no, etc... y de ahí obtener las dimensiones Width i Height.

Espero te sirva.


Gracias amigo...

lo implementé me ha sido de mucha ayuda...

MAURICIO


Arriba
 Perfil  
Responder citando  
NotaPublicado: Sab Nov 11, 2006 4:24 pm 

Registrado: Vie Oct 07, 2005 6:15 pm
Mensajes: 72
Bruno escribió:
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()


Gracias por el ejemplo...

Me sacaste de un apuro

MAURICIO


Arriba
 Perfil  
Responder citando  
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 5 mensajes ] 

Todos los horarios son UTC + 1 hora [ DST ]


No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro

Buscar:
Saltar a:  
cron