Página 1 de 1

Saber la anchura de un control antes de crearlo

Publicado: Lun Mar 14, 2011 6:56 pm
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

Saber la anchura de un control antes de crearlo

Publicado: Lun Mar 14, 2011 9:45 pm
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.

Saber la anchura de un control antes de crearlo

Publicado: Mar Mar 15, 2011 9:52 am
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