In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Saber la anchura de un control antes de crearlo

Foro público de Xailer en español
Fredy
Posts: 199
Joined: Wed Mar 29, 2006 1:28 am

Saber la anchura de un control antes de crearlo

Postby Fredy » Mon Mar 14, 2011 6:56 pm


Hola,
Estoy intentando crear un control similar a las nubes de etiquetas que aparecen en algunas páginas web, pero de primeras me encuentro con un problema que no sé cómo solucionar:
Tengo que poner varios THyperlink unos pegados a otros y pare ello me hace falta saber la anchura en pixels que va a tener el texto asignaré a cText. Pues no hay manera de saberlo.
Sólo he podido calcularlo para una fuente fija como lo courier donde sé de antemano la anchura de cada caracter.
De momento la cosa se queda así­.
--------------------
WITH object oControl := THyperLink():New( ::oBevel1 )
:oFont := TFont():Create( "Courier", ::nPixels, 2, 400 )
:cText := aArray[n]
nLen := ( Len( :cText ) * ::nPixels ) + 1
if ::nLeft +18+ nLen + ::nPixels >= ::oBevel1:nWidth
::nTop += 14 *(::nPixels/8)
::nLeft := 0
endif
:SetBounds(::nLeft, ::nTop, nLen, 14*(::nPixels/8) )
::nLeft += nLen +1//::nPixels
:OnClick := "HyperLink1Click"
:Create()
END
---------------------
Así­ que la pregunta serí­a ¿Cómo calcular la variable nLen para cualquier tipo de letra y tamaño?
Otra cosa. Sé que los controles tienen una propiedad que me dicen qué tipo de control son, pero soy incapaz de acordarme de cual es.
1 Saludico,
Fredy
--

Attached files
User avatar
XeviCOMAS
Posts: 524
Joined: Sat Mar 12, 2011 8:16 pm

Saber la anchura de un control antes de crearlo

Postby XeviCOMAS » Mon Mar 14, 2011 9:45 pm

Fredy,
puedes crear un control TLabel oculto, aprovechando lAutosize := .T. que lleva por defecto
WITH OBJECT miLabel := TLabel():New()
:oFont := TFont():Create( "Courier", ::nPixels, 2, 400 )
:lVisible := .F.
:cText := aArray[n]
:Create()
END WITH
nAncho := miLabel:nWidth
miLabel:Destroy()
Un Saludo,
Xevi.
Un Saludo,
Xevi.
User avatar
ignacio
Site Admin
Posts: 8574
Joined: Mon Apr 06, 2015 8:00 pm
Location: Madrid, Spain
Contact:

Saber la anchura de un control antes de crearlo

Postby ignacio » Tue Mar 15, 2011 9:52 am

Fredy,
Tienes un método oFont:GetTextSize.
Un saludo
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
http://www.xailer.com/forum
http://www.xailer.com/dokuwiki
"Fredy" escribió en el mensaje de
noticias:b8938185145a8cdb0909c82d14b@news.xailer.com...
Hola,
Estoy intentando crear un control similar a las nubes de etiquetas que
aparecen en algunas páginas web, pero de primeras me encuentro con un
problema que no sé cómo solucionar:
Tengo que poner varios THyperlink unos pegados a otros y pare ello me hace
falta saber la anchura en pixels que va a tener el texto asignaré a cText.
Pues no hay manera de saberlo.
Sólo he podido calcularlo para una fuente fija como lo courier donde sé de
antemano la anchura de cada caracter.
De momento la cosa se queda así­.
--------------------
WITH object oControl := THyperLink():New( ::oBevel1 )
:oFont := TFont():Create( "Courier", ::nPixels, 2, 400 )
:cText := aArray[n]
nLen := ( Len( :cText ) * ::nPixels ) + 1
if ::nLeft +18+ nLen + ::nPixels >= ::oBevel1:nWidth
::nTop += 14 *(::nPixels/8)
::nLeft := 0
endif
:SetBounds(::nLeft, ::nTop, nLen, 14*(::nPixels/8) )
::nLeft += nLen +1//::nPixels
:OnClick := "HyperLink1Click"
:Create()
END
---------------------
Así­ que la pregunta serí­a ¿Cómo calcular la variable nLen para cualquier
tipo de letra y tamaño?
Otra cosa. Sé que los controles tienen una propiedad que me dicen qué tipo
de control son, pero soy incapaz de acordarme de cual es.
1 Saludico,
Fredy
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info

Return to “Spanish”