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
Responder
Fredy
Mensajes: 199
Registrado: Mié Mar 29, 2006 1:28 am

Saber la anchura de un control antes de crearlo

Mensaje por Fredy »


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
Avatar de Usuario
XeviCOMAS
Mensajes: 582
Registrado: Sab Mar 12, 2011 8:16 pm

Saber la anchura de un control antes de crearlo

Mensaje por XeviCOMAS »

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.
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9246
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Saber la anchura de un control antes de crearlo

Mensaje por ignacio »

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:[email=b8938185145a8cdb0909c82d14b@news.xailer.com...]b8938185145a8cdb0909c82d14b@news.xailer.com...[/email]
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]
https://www.xailer.com
Responder