Page 1 of 2
DEFINE FONT vs TFont()
Posted: Wed Dec 13, 2017 9:43 am
by Xevi
Buenos dias,
estoy con mis pinitos, y acostumbrado a trabajar directamente con la Clase (son costumbres que se van adquiriendo) me encuentro con mi primer "error" o falta de saber el como en lugar de
DEFINE FONT oFont2 NAME 'Calibrí' SIZE 6, -13
puedo hacer
WITH OBJECT oFont2 := TFont:New()
:cFaceName := "Calibrí"
:nSize := 12
END
al compilar, me lanza el error
Error description: Error BASE/1003 Variable does not exist: TFONT
Supongo que me hace falta incluir el fuente de la clase "TFONT.prg" o alguna lib... pero, no hay una lib de FW que englobe esta o todas las clases???
Gracias.
Un Saludo,
Xevi.
Re: DEFINE FONT vs TFont()
Posted: Wed Dec 13, 2017 9:54 am
by hmpaquito
Así TFont():New()
Re: DEFINE FONT vs TFont()
Posted: Wed Dec 13, 2017 10:11 am
by Xevi
Perdón!!!
error de novato, novato!!!
No lo havia visto.
Otra cosa, porqué hay que definir ancho alto de una Font???
Yo quiero la fuente Calibrí tamaño 12, vaya, en cualquier desplegable de fuentes de windows, Word, Excel...
Y las propiedades de TFont, hay unas cuantas que hacen referencia a tamaño..
nHeight, nWidth, nInpHeight, nInpWidth, nWeight...
por mas que he probado combinaciones, creo no haber hallado con la que se "ajuste" a la real que obtengo en otras aplicaciones windows.
Parece como si "se pintara" la fuente, como sin definición, rara, no se corresponde con la "real"
Gracias.
Un Saludo,
Xevi.
Re: DEFINE FONT vs TFont()
Posted: Wed Dec 13, 2017 10:14 am
by cnavarro
Usalo asi
Code: Select all
DEFINE FONT oFont2 NAME 'Calibrí' SIZE 0, -12
Re: DEFINE FONT vs TFont()
Posted: Wed Dec 13, 2017 10:39 am
by Xevi
Ya habia provado... con todo y con eso, la fuente "distorsiona" con la real, en FW es un pequeñin mas pequeña y menos altas
por ejemplo, las 'b', 'p' o 'A' se aprecia claramente la diferencia.
He probado muchas combinaciones,... nada, ya encontraré sinó una fuente que me vaya bien y me agrade mas.
Por cierto
oFont2 := TFont():New( "Calibrí", 0, -12,,,,,,,,,,,,,, )
WITH OBJECT oFont2 := TFont():New()
:cFaceName := "Calibrí"
:nWidth := 0
:nHeight := -12
END
deberian de dar el mismo resultado final!!!
Pues no, el segundo muestra en negrita.
Un Saludo,
Xevi.
Re: DEFINE FONT vs TFont()
Posted: Wed Dec 13, 2017 10:42 am
by cnavarro
Un tema importante: control de pérdidas de recursos
Te pongo un ejemplo para que en tus programas puedas controlas si hay algún recurso: font, imagen, pen, etc que no haya sido liberado, que ahora al principio te aconsejo que lo incluyas en tus aplicaciones
Code: Select all
#include "Fivewin.ch"
Static oFont
Static oFontMenu
Static oWnd
//----------------------------------------------------------------------------//
function Main()
Local cFont := "Tahoma"
Local cFontH := -14
local cLog := cFileSetExt( ExeName(), "log" ) // Defines el nombre del fichero de error
local oMnu
FERASE( cLog )
SetResDebug( .T. ) // Activas el control de recursos
DEFINE FONT oFont NAME "TIMES NEW ROMAN" SIZE 0,-12
DEFINE FONT oFontMenu NAME cFont SIZE 0, cFontH WEIGHT 300
DEFINE WINDOW oWnd MENU ( oMnu := MakeMenu() ) TITLE FWVERSION
ACTIVATE WINDOW oWnd CENTERED
RELEASE FONT oFont
RELEASE FONT oFontMenu
FERASE( "checkres.txt" ) // Borras el fichero anterior
CHECKRES() // Generas el nuevo fichero
if File( "checkres.txt" )
waitrun("notepad checkres.txt") // lo visualizas si hay pérdida de recursos
endif
if file( clog )
winexec( "notepad.exe " + clog )
endif
return nil
//----------------------------------------------------------------------------//
function MakeMenu()
local oMenu, oMnu1, oMnu2
MENU oMenu
MENUITEM "One"
MENU oMnu1
MENUITEM "Sunday" CHECKED
MENUITEM SEPARATOR Upper( "Select" )
MENUITEM "Monday" + CRLF + "Other" BOLD RADIOCHECK 3, 2
MENUITEM "Tuesday" ACTION MsgInfo( "Hola" ) ITALIC
MENUITEM "WednesdaY"
SEPARATOR
MENUITEM "Thursday" FILE "..\bitmaps\full.bmp"
SEPARATOR
MENUITEM "Exit" ACTION WndMain():End() HSYSBITMAP 5
ENDMENU
MENUITEM "Two"
MENU oMnu2
MENUITEM "Sunday" HSYSBITMAP 9
SEPARATOR
MENUITEM "Monday" HSYSBITMAP 11
ENDMENU
ENDMENU
return oMenu
//----------------------------------------------------------------------------//
Re: DEFINE FONT vs TFont()
Posted: Wed Dec 13, 2017 11:04 am
by Xevi
Cristobal,
Gracias por el aporte.
Otra cosa que ahora detecto en tu ejemplo.
El menu, si se le pone la cláusula 2007 o 2013 o 2015 se vuelve lento al cambiar entre desplegable.
He visto que es por los iconos de recursos, si los comento, luego va como debe de ir.
Haz la prueba y verás!!!
function MakeMenu()
local oMenu, oMnu1, oMnu2
MENU oMenu 2015 //menu estilo 2007/2013/2015
MENUITEM "One"
MENU oMnu1
MENUITEM "Sunday" CHECKED
MENUITEM SEPARATOR Upper( "Select" )
MENUITEM "Monday" + CRLF + "Other" BOLD RADIOCHECK 3, 2
MENUITEM "Tuesday" ACTION MsgInfo( "Hola" ) ITALIC
MENUITEM "WednesdaY"
SEPARATOR
MENUITEM "Thursday" FILE "..\bitmaps\full.bmp"
SEPARATOR
MENUITEM "Exit" ACTION WndMain():End()// HSYSBITMAP 5 lo comento porque se vuelve 'pesado' en menu 2007/2013/2015
ENDMENU
MENUITEM "Two"
MENU oMnu2
MENUITEM "Sunday"// HSYSBITMAP 9 lo comento porque se vuelve 'pesado' en menu 2007/2013/2015
SEPARATOR
MENUITEM "Monday"// HSYSBITMAP 11 lo comento porque se vuelve 'pesado' en menu 2007/2013/2015
ENDMENU
ENDMENU
return oMenu
És un bug o fallo en FW ???
Un Saludo,
Xevi.
Re: DEFINE FONT vs TFont()
Posted: Wed Dec 13, 2017 11:07 am
by cnavarro
Xevi, es la primera noticia que tengo sobre el tema, y nadie lo ha comentado
Qué ordenador utilizas?
Re: DEFINE FONT vs TFont()
Posted: Wed Dec 13, 2017 11:54 am
by Xevi
No se como insertar o adjuntar una imagen...
Windows 10 Enterprise 2016 LTSB
Intel core i5-6200U CPU 2.3GHz
8GB RAM
Sistema 64 bits
Re: DEFINE FONT vs TFont()
Posted: Wed Dec 13, 2017 12:24 pm
by cnavarro
Xevi wrote:No se como insertar o adjuntar una imagen...
Windows 10 Enterprise 2016 LTSB
Intel core i5-6200U CPU 2.3GHz
8GB RAM
Sistema 64 bits
Hay un boton que pone Img, pero has de subirla a una web ( yo utilizo Postimage.org )
Con ese ordenador no puedes tener ningun problema.
Tengo que verlo
Re: DEFINE FONT vs TFont()
Posted: Fri Dec 15, 2017 3:54 am
by nageswaragunupudi
Code: Select all
WITH OBJECT oFont2: = TFont (): New ()
: cFaceName: = "Calibrí"
: nWidth: = 0
: nHeight: = -12
END
This approach does not work.
TFont():New() method should get all the parameters. Then only the New() method can create a font object depending on the parameters. When New() is called without any parameters, a default font object is created. Subsequently adding datas like cFaceName, nHeight are obviously
useless.
We once again recommend using command syntax, eg. DEFINE FONT ...
Even if we make some improvements/changes to New() method in future, we do always keep compatibility at the command level.
Re: DEFINE FONT vs TFont()
Posted: Fri Dec 15, 2017 9:15 am
by hmpaquito
Xevi,
En general, la creación de un objeto varía entre uno o dos pasos.
En el segundo caso el objecto precisa activarse (activate)
1 paso, TFont,
2 pasos, TDialog,
Code: Select all
obj:= TDialog():New(_PARAMETROS_)
WITH OBJECT obj
:nWidth:= 400
END
obj:Activate()
Re: DEFINE FONT vs TFont()
Posted: Fri Dec 15, 2017 10:03 am
by Xevi
Bien... hasta hí, entiendo, y correjiré la forma en escribir código en FW.
Manera "distinta" de tratar a las Classes/objetos de FW. Entendido.
Ahora bien, mi inquietud, es la que por mas que haga
DEFINE FONT oFont1 NAME "Calibri" SIZE 0, -12
esa font resultante no se corresponde PARA NADA a la que se obtiene en una aplicación windows que la utilice, vease Word o Excel o la otra aplicación que tengo desarrollada en otro entorno xBase.
he provado a cambiar SIZE por 0,-14 (la que más se acerca), 8,-12 / 8,-14...
pero los trazos de la letra no se corresponden. Con FW los palos de las 'p' o 'b' son cortos, la 'A' es mas chata, la letra en si no es tan 'redondeada' como deberia.
Es una inquietud que tengo... y viene de la primera vez que probé FW, que los trazos de letra no estan bien trazados por decirlo de una manera, la definicion es mas 'basta'. Es como si FW utilizara un 'pinzel' y dibujara la letra en lugar de coger la fuente en si.
Se que FW me abre muchas más opciones, pero en los detalles pequeños el resultado final importa... y uno es el estético.
Estoy buscando una fuente que me atraiga y que haga que mis aplicaciones me 'entren por la vista' si no puede ser con esa.
Un Saludo,
Xevi.
Re: DEFINE FONT vs TFont()
Posted: Fri Dec 15, 2017 1:00 pm
by karinha
Code: Select all
C:\FWH1701\samples
TESTFON1.PRG
testfon2.prg
testfon3.prg
testfont.prg
http://forums.fivetechsupport.com/viewt ... ont#p94698
Saludos.
Re: DEFINE FONT vs TFont()
Posted: Fri Dec 15, 2017 2:19 pm
by Xevi
Bien... testfon2.prg me sirve para mostrar el comportamiento que intento explicar.
Hay un boton que se puede seleccionar la fuente/tamaño/tipo... Si selecciono Calibri Normal 12, que es el tipo de letra que intento usar en mi aplicación, canvia el oSay correctamente y SI muestra el texto en la fuente seleccionada CORRECTO!!!
PERO...
He añadido un par de lineas al test.
podeis ver el prg en cuestion...
Code: Select all
// Some tests with fonts capabilities
#include "FiveWin.ch"
Function Main()
LOCAL oWnd,oSay
Local oFontCalibri12
DEFINE WINDOW oWnd;
FROM 1,5 TO 20,65;
TITLE "Test font. oSay:oFont:lBold is always .t.!"
DEFINE FONT oFontCalibri12 NAME "Calibri" SIZE 0, -12
@ 11.5,10 SAY "Is this bold... Font Calibri12 ?" FONT oFontCalibri12
@ 10,10 SAY oSay;
PROMPT "Is this bold now?" OF oWnd
@ 2,10 BUTTON "Change Font";
SIZE 100,50;
ACTION oSay:SelFont() OF oWnd
@ 2,40 BUTTON "Bold?";
SIZE 100,50;
ACTION MsgInfo(If(oSay:oFont:lBold,"Yes, oSay:oFont:lBold says it's BOLD!","NOT BOLD, OK?")) OF oWnd
ACTIVATE WINDOW oWnd
RETU NIL
una variable local oFontCalibri12
tal como entiendo que deberia definir la fuente y asignarla a un say
DEFINE FONT oFontCalibri12 NAME "Calibri" SIZE 0, -12
@ 11.5,10 SAY "Is this bold... Font Calibri12 ?" FONT oFontCalibri12
pues bien, de entrada, al ejecutar el programa, no se aprecia esa fuente en el nuevo say, y si pulsamos para cambiar el fuente, cambia el fuente correctamente del primer say y se puede comprovar/ver la diferencia entre una fuente de un say y el otro say.
Así que,... cómo se define correctamente una fuente para que pille de primera al mostrar el SAY ??? (o Get, o...)
Un Saludo,
Xevi.