Frase se ajuste a un ancho
Frase se ajuste a un ancho
Hola,
Me gustaría saber, si alguien sabe como calcular el tamaño del font a usar, para que dada una frase y un nombre de font, la frase mida un ancho determinado en pixeles.
Mi idea es si es posible autoajustar textos a diferentes resoluciones intentando que ocupen tamaños predefinidos.
Me gustaría saber, si alguien sabe como calcular el tamaño del font a usar, para que dada una frase y un nombre de font, la frase mida un ancho determinado en pixeles.
Mi idea es si es posible autoajustar textos a diferentes resoluciones intentando que ocupen tamaños predefinidos.
Un Saludo,
Joaquín Martínez
Joaquín Martínez
Re: Frase se ajuste a un ancho (Solucionado)
Buenas,
Ya lo he resuelto creando una función que me hiciera los cálculos y ha funcionado bien.
Ya lo he resuelto creando una función que me hiciera los cálculos y ha funcionado bien.
Un Saludo,
Joaquín Martínez
Joaquín Martínez
- joseluisysturiz
- Posts: 2064
- Joined: Fri Jan 06, 2006 9:28 pm
- Location: Guatire - Caracas - Venezuela
- Contact:
Re: Frase se ajuste a un ancho
Saludos, he intendado hacer lo que dices pero seria el titulo de una ventana MAXIMIZADA o al tamaño que se cambie, se que hay que hacer varias divisiones, podrias compartir la formula haber si me sirve o me da guia para lo que quiero.? gracias, saludos...
Dios no está muerto...
Gracias a mi Dios ante todo!
Gracias a mi Dios ante todo!
Re: Frase se ajuste a un ancho
Buenas,
No lo puse porque no pensé que interesara mucho. Ahí lo llevas.
No lo puse porque no pensé que interesara mucho. Ahí lo llevas.
Code: Select all | Expand
Function creaFontAmedida( cNameFont, cText , nWidth, oWnd )
Local oFont , nMax := -100
Local nSize , nHeightFont
DEFAULT cNameFont := "Verdana"
DEFAULT cText := "Prueba font a medida"
DEFAULT nWidth := 10
nHeightFont := -1
Do While .t.
DEFINE FONT oFont NAME cNameFont SIZE 0, nHeightFont
nSize := oWnd:GetWidth( cText, oFont )
if nSize > nWidth
oFont:end()
nHeightFont++
DEFINE FONT oFont NAME cNameFont SIZE 0, nHeightFont
nWidth := oWnd:GetWidth( cText, oFont ) // Devuelve por referencia el ancho real del Texto
exit
else
oFont:end()
nHeightFont--
endif
// Sale por error, hay un desbordamiento
if Abs(nMax)<abs(nHeightFont)
exit
endif
//--------------------------------------
Enddo
return oFont
Un Saludo,
Joaquín Martínez
Joaquín Martínez
- joseluisysturiz
- Posts: 2064
- Joined: Fri Jan 06, 2006 9:28 pm
- Location: Guatire - Caracas - Venezuela
- Contact:
Re: Frase se ajuste a un ancho
Saludos, creo que entendi mal lo que hacia tu funcion, pero lamentablemente no es lo que necesito, lo que busco es centrar un texto(titulo) en el ancho de una ventana o dialogo, algo como esto y no que salga siempre a la izquierda y que si se ajusta tamaño de ventana/dialogo, el texto se auto-ajuste al nuevo tamaño, parecido a AL_CENTER en las col de xbrowse, igual gracias por tu atencion, saludos...
[ TITULO VENTANA/DIALOGO ] ---> BORDE DEL TITULO
![Shocked :shock:](./images/smilies/icon_eek.gif)
[ TITULO VENTANA/DIALOGO ] ---> BORDE DEL TITULO
Dios no está muerto...
Gracias a mi Dios ante todo!
Gracias a mi Dios ante todo!
Re: Frase se ajuste a un ancho
Fijate si esto es lo que buscas
Saludos
Code: Select all | Expand
#include 'fivewin.ch'
#define DT_CENTER 0x0001
#define DT_VCENTER 0x0004
Static oWnd
//----------------------------------------------------------------------------//
Function Main()
Local cTexto := 'texto de prueba'
Define Window oWnd
Activate Window oWnd On Paint Texto( cTexto )
Return 0
//----------------------------------------------------------------------------//
Function Texto( cTitulo )
Local hDc := oWnd : GetDC()
Local aRect := GetClientRect( oWnd : hWnd )
Define Font oFont1 Name "Segoe UI" Size 0, -20 Bold
oFont1 : Activate( hDc )
SetTextColor( hDC, CLR_WHITE )
SetBkColor( hDC, RGB( 43, 87, 154 ) )
DrawTextEx( hDC, cTitulo, { 02, 15, 45, aRect[ 4 ] - 50 }, DT_CENTER + DT_VCENTER )
oFont1 : Deactivate( hDC )
oWnd : ReleaseDc()
Return 0
Saludos
- joseluisysturiz
- Posts: 2064
- Joined: Fri Jan 06, 2006 9:28 pm
- Location: Guatire - Caracas - Venezuela
- Contact:
Re: Frase se ajuste a un ancho
Horacion, gracias por tu respuesta, es y no es lo que busco, es porque hace lo que quiero, centrar TEXTO en la VENTANA, pero quiero que lo haga en la barra donde va el TITLE de la ventana, que tambien contiene el icono y los botones de maximizar, etc...vere si puedo usar lo que enviastes, igual gracias, saludos... ![Shocked :shock:](./images/smilies/icon_eek.gif)
![Shocked :shock:](./images/smilies/icon_eek.gif)
Dios no está muerto...
Gracias a mi Dios ante todo!
Gracias a mi Dios ante todo!
- joseluisysturiz
- Posts: 2064
- Joined: Fri Jan 06, 2006 9:28 pm
- Location: Guatire - Caracas - Venezuela
- Contact:
Re: Frase se ajuste a un ancho
Horacio, exactamente es lo que quiero , que sirva para ventanas y dialogos, cual es el truco.? gracias, saludos... ![Shocked :shock:](./images/smilies/icon_eek.gif)
![Shocked :shock:](./images/smilies/icon_eek.gif)
Dios no está muerto...
Gracias a mi Dios ante todo!
Gracias a mi Dios ante todo!
- FranciscoA
- Posts: 2163
- Joined: Fri Jul 18, 2008 1:24 am
- Location: Chinandega, Nicaragua, C.A.
Re: Frase se ajuste a un ancho
Antes que nada te comento que no se puede cambiar el aspecto del caption de los dialogos y ventanas, Windows no lo permite, lo único que queda es hacerlo "a mano". Te posteo el código, es para un dialogo pero es lo mismo para una ventana.
Saludos
Code: Select all | Expand
#include 'fivewin.ch'
#define DT_CENTER 0x0001
#define DT_VCENTER 0x0004
Function Main()
Local oDlg
Local nRowPos
Local nColPos
Local oCrsHand
Local lDrag := .f.
Local lInit := .t.
Define Dialog oDlg From 100, 100 To 500, 700 Pixel Style nOr( WS_POPUP ) Color 0, CLR_WHITE Transparent
oDlg : bLClicked := { | nRow, nCol | SetCapture( oDlg : hWnd ), nRowPos := nRow, nColPos := nCol, lDrag := .T., oDlg : oCursor := oCrsHand }
oDlg : bMMoved := { | nRow, nCol | If( lDrag, oDlg : Move( oDlg : nTop + nRow - nRowPos,;
oDlg : nLeft + nCol - nColPos,,, .T. ),) }
oDlg : bLButtonUp := { || lDrag := .f., oDlg : oCursor := nil, ReleaseCapture() }
Activate Dialog oDlg Centered On Paint CabeceraDialogo( oDlg, "Altas alumnos" ) Valid ( .t. )
Return 0
//----------------------------------------------------------------------------//
Function CabeceraDialogo( oDlg, cTitulo )
Local oSay
Local oBmp
Local oFont1
Local hBitmap
Local hDc := oDlg : GetDC()
Local hPen := CreatePen( PS_SOLID, 1, RGB( 43, 87, 154 ) )
Local aRect := GetClientRect( oDlg : hWnd )
Local hBrush := CreateSolidBrush( RGB( 43, 87, 154 ) )
Local hOldPen := SelectObject( hDc, hPen )
Local hOldBrush := SelectObject( hDc, hBrush )
Default cTitulo := ''
Define Font oFont1 Name "Segoe UI" Size 0, -20 Bold
Rectangle( hDC, aRect[ 1 ],;
aRect[ 2 ],;
35,;
aRect[ 4 ] )
Rectangle( hDC, aRect[ 1 ],;
0,;
aRect[ 3 ],;
5 )
Rectangle( hDC, aRect[ 1 ],;
aRect[ 4 ] - 5,;
aRect[ 3 ],;
aRect[ 4 ] )
Rectangle( hDC, aRect[ 4 ] - 5,;
aRect[ 2 ],;
aRect[ 3 ] - 5,;
aRect[ 4 ] )
hBitmap := LoadBitmap( GetResources(), 'cerrar' )
DrawBitmap( hDc, hBitmap, 8, aRect[ 4 ] - 45, 37, 20 )
oFont1 : Activate( hDc )
SetTextColor( hDC, CLR_WHITE )
SetBkColor( hDC, RGB( 43, 87, 154 ) )
DrawTextEx( hDC, cTitulo, { 02, 15, 45, aRect[ 4 ] - 50 }, DT_CENTER + DT_VCENTER )
SelectObject( hDc, hOldPen )
SelectObject( hDc, hOldBrush )
DeleteObject( hPen )
DeleteObject( hBrush )
oFont1 : Deactivate( hDC )
oDlg : ReleaseDc()
oFont1 : End()
Return 0
Saludos
- joseluisysturiz
- Posts: 2064
- Joined: Fri Jan 06, 2006 9:28 pm
- Location: Guatire - Caracas - Venezuela
- Contact:
Re: Frase se ajuste a un ancho
Sencillamente Buenisimo, es lo que busco en el titulo del dialogo, esta agradle visualmente y orginal el diseño de tu dialogo, seria bueno indagar un poco mas y salir de la imagen rutinaria de los dialosgos, eso daria una mejor imagen visual de nuestros sistemas, no se si sera facil y un poco dificil hacer algo como lo que hicistes, pero lo intentare y hare pruebas haber que sale, ahora en relacion al centrado crei que con una formula que calculase el ancho de la barra de la ventana o dlg y sabiendo el largo del texto, se pudiese suma SPACE() al texto y asi centrarse, se que existe pero he buscado en google y nada, es tecnica y formula que usan los diseñadores para centrar texto o imagenes...en resumen...GRACIAS y ahora probare en mis sistemas lo de centrar el TITLE, seria una buena opcion como parametro original de la clase y asi salir de la rutina visual...saludos... ![Shocked :shock:](./images/smilies/icon_eek.gif)
![Shocked :shock:](./images/smilies/icon_eek.gif)
Dios no está muerto...
Gracias a mi Dios ante todo!
Gracias a mi Dios ante todo!
Re: Frase se ajuste a un ancho
Comencé un proyecto nuevo y decidí utilizar una ribbon con estilo 2013 y me di cuenta que los dialogos ordinarios no quedaban bien por eso me puse a trabajar para cambiarles el aspecto. Toda la magia está en el evento Paint y realmente no me fue difícil ya que FW tiene primitivas gráficas para todo. Pero claro, es más trabajo.
Saludos
Saludos
- joseluisysturiz
- Posts: 2064
- Joined: Fri Jan 06, 2006 9:28 pm
- Location: Guatire - Caracas - Venezuela
- Contact:
Re: Frase se ajuste a un ancho
horacio wrote:Comencé un proyecto nuevo y decidí utilizar una ribbon con estilo 2013 y me di cuenta que los dialogos ordinarios no quedaban bien por eso me puse a trabajar para cambiarles el aspecto. Toda la magia está en el evento Paint y realmente no me fue difícil ya que FW tiene primitivas gráficas para todo. Pero claro, es más trabajo.
Saludos
Que bueno, lo que me di cuenta es que no es que pones el titulo en la barra de sistema por llamarla de alguna manera, es decir, donde va el TITLE, sino que cambias el style para que desaparezca la barra y luego creas un rectangulo que emula la barra y alli centras el titulo, buen truco visual, pero me gusta como queda solo que para mover el dialogo o la ventana o para redimenzionarlo, da un efecto tembloroso por el forzamiento, pero de mi parte fue un buen trabajo. La formula para lo de centrar es TAMAÑO DE LA VENTANA O DIALOGO(aunque deberia ser de la barra) menos(-) el tamaño del texto dividido(/) entre 2...asi es la formula para centrar de diseño, crfeo que asi podria calcular la cantidad de SPACE() para anteponer al texto, vere que tal funciona y aviso, gracias, saludos...
![Shocked :shock:](./images/smilies/icon_eek.gif)
Dios no está muerto...
Gracias a mi Dios ante todo!
Gracias a mi Dios ante todo!
Re: Frase se ajuste a un ancho
Buenas Tardes José:
Buen Tema, centrar el título en Ventana o Dialogo ...
Estuve leyendo el post anterior donde pusiste ...
(oDlg:nWidth-LEN(cTitle))/2
lo cual no te resultaba debido a que el nWidth se calcula en pixeles y el LEN se calcula en columnas
Prueba Asi:
Saludos
Julio César Gómez Cortéz
Jultzem Estudio
Lima Perú
Buen Tema, centrar el título en Ventana o Dialogo ...
Estuve leyendo el post anterior donde pusiste ...
(oDlg:nWidth-LEN(cTitle))/2
lo cual no te resultaba debido a que el nWidth se calcula en pixeles y el LEN se calcula en columnas
Prueba Asi:
Code: Select all | Expand
#include "FiveWin.ch"
MEMVAR VePru,Titulo
FUNCTION Main()
Titulo='Probando un Titulo Centrado'
DEFINE WINDOW VePru FROM 0,0 TO 35,100 TITLE Titulo
ACTIVATE WINDOW VePru ON INIT Centro()
RETU nil
FUNCTION Centro()
LOCAL espacios
espacios=(((VePru:nWidth)/8)-(LEN(Titulo))/2)
VePru:cTITLE := SPACE( espacios ) + Titulo
RETU nil
Saludos
Julio César Gómez Cortéz
Jultzem Estudio
Lima Perú