DEFINE FONT vs TFont()

User avatar
Xevi
Posts: 168
Joined: Wed Nov 29, 2017 11:42 am
Location: Girona

DEFINE FONT vs TFont()

Post 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.
Un Saludo,
Xevi.

Aprendiz de la vida!!!
hmpaquito
Posts: 1200
Joined: Thu Oct 30, 2008 2:37 pm

Re: DEFINE FONT vs TFont()

Post by hmpaquito »

Así TFont():New()
User avatar
Xevi
Posts: 168
Joined: Wed Nov 29, 2017 11:42 am
Location: Girona

Re: DEFINE FONT vs TFont()

Post 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.
Un Saludo,
Xevi.

Aprendiz de la vida!!!
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: DEFINE FONT vs TFont()

Post by cnavarro »

Usalo asi

Code: Select all

DEFINE FONT oFont2 NAME 'Calibrí' SIZE 0, -12

 
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
User avatar
Xevi
Posts: 168
Joined: Wed Nov 29, 2017 11:42 am
Location: Girona

Re: DEFINE FONT vs TFont()

Post 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.
Un Saludo,
Xevi.

Aprendiz de la vida!!!
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: DEFINE FONT vs TFont()

Post 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

//----------------------------------------------------------------------------//
 
 
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
User avatar
Xevi
Posts: 168
Joined: Wed Nov 29, 2017 11:42 am
Location: Girona

Re: DEFINE FONT vs TFont()

Post 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.
Un Saludo,
Xevi.

Aprendiz de la vida!!!
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: DEFINE FONT vs TFont()

Post by cnavarro »

Xevi, es la primera noticia que tengo sobre el tema, y nadie lo ha comentado
Qué ordenador utilizas?
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
User avatar
Xevi
Posts: 168
Joined: Wed Nov 29, 2017 11:42 am
Location: Girona

Re: DEFINE FONT vs TFont()

Post 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
Un Saludo,
Xevi.

Aprendiz de la vida!!!
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: DEFINE FONT vs TFont()

Post 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
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
User avatar
nageswaragunupudi
Posts: 8017
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Contact:

Re: DEFINE FONT vs TFont()

Post 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.
Regards

G. N. Rao.
Hyderabad, India
hmpaquito
Posts: 1200
Joined: Thu Oct 30, 2008 2:37 pm

Re: DEFINE FONT vs TFont()

Post 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,

Code: Select all

obj:= TFont():New(_PARAMETROS_)

2 pasos, TDialog,

Code: Select all

obj:= TDialog():New(_PARAMETROS_)
WITH OBJECT obj
   :nWidth:= 400
END
obj:Activate()
User avatar
Xevi
Posts: 168
Joined: Wed Nov 29, 2017 11:42 am
Location: Girona

Re: DEFINE FONT vs TFont()

Post 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.
Un Saludo,
Xevi.

Aprendiz de la vida!!!
User avatar
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: DEFINE FONT vs TFont()

Post by karinha »

Code: Select all

C:\FWH1701\samples

TESTFON1.PRG
testfon2.prg
testfon3.prg
testfont.prg
 
http://forums.fivetechsupport.com/viewt ... ont#p94698

Saludos.
João Santos - São Paulo - Brasil
User avatar
Xevi
Posts: 168
Joined: Wed Nov 29, 2017 11:42 am
Location: Girona

Re: DEFINE FONT vs TFont()

Post 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.
Un Saludo,
Xevi.

Aprendiz de la vida!!!
Post Reply