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.
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
Saber la anchura de un control antes de crearlo
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
Saber la anchura de un control antes de crearlo
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.
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.
Xevi.
- 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
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
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