Problema o Bug TSAY

Problema o Bug TSAY

Postby jmartial » Fri Jan 30, 2015 7:57 pm

Hola,

Intento poner un tamaño y posicionar desde código un control TSAY.

Le asigno un font y le digo tamaño y posición, pero veo que sale entrecortado por debajo, le añado la clausula BORDER y veo que el texto, se pinta desplazado hacia abajo dentro de la caja de texto.

¿Cual es el problema o que estoy haciendo mal?

Code: Select all  Expand view
@ nFila , nCol  SAY oSay2 PROMPT cHora COLOR CLR_WHITE PIXEL BORDER SIZE nAnchoText,oFont2:nHeight TRANSPARENT FONT oFont2 OF oPanelDer


Y Este es el resultado erróneo:

Image
Un Saludo,
Joaquín Martínez
jmartial
 
Posts: 458
Joined: Tue Mar 14, 2006 7:26 pm

Re: Problema o Bug TSAY

Postby jmartial » Fri Jan 30, 2015 8:49 pm

Hola,

He descubierto algo más.

Si quiero que se vea completo hay que hacer que la altura del TSAY sea

oFont:nHeight + (oFont2:nHeight/2)

Pero el texto aparece centrado verticalmente, debería existir la forma que se ponga arriba, abajo o centrado y sin esos márgenes alrededor.
Un Saludo,
Joaquín Martínez
jmartial
 
Posts: 458
Joined: Tue Mar 14, 2006 7:26 pm

Re: Problema o Bug TSAY

Postby Antonio Linares » Sun Feb 01, 2015 8:00 am

Joaquín,

Si revisas la Clase TSay verás que nosotros no hacemos nada, es decir, es el API de Windows quien lo dibuja así.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41315
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Problema o Bug TSAY

Postby jmartial » Sun Feb 01, 2015 8:38 am

Sí Antonio,

La había revisado, ¿pero que solución tiene?

Reescribir la clase con drawtext? Recalcular internamente en la Tsay actual?

Desde luego, en otros lenguajes y entornos no existe ese problema. No creo que sea buena idea dejarlo así, no?
Un Saludo,
Joaquín Martínez
jmartial
 
Posts: 458
Joined: Tue Mar 14, 2006 7:26 pm

Re: Problema o Bug TSAY

Postby Antonio Linares » Sun Feb 01, 2015 8:44 am

Joaquín,

Si asi lo hace Windows, para mi la solución es usar las dimensiones correctas en relación al font que estemos usando.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41315
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Problema o Bug TSAY

Postby jmartial » Sun Feb 01, 2015 9:06 am

Antonio de acuerdo,

¿Pero sería posible modificar la Tsay, para que si el programador quiere pintar en una posició, la clase lo pinte y aumente la altura si es necesario para que no salga entrecortada?

Creo que no sería muy complicado y sería lo ideal. Me he vuelto loco intentando posicionar textos y viendo que la Tsay no lo hacía como la lógica me decía.
Un Saludo,
Joaquín Martínez
jmartial
 
Posts: 458
Joined: Tue Mar 14, 2006 7:26 pm

Re: Problema o Bug TSAY

Postby jmartial » Sun Feb 01, 2015 9:31 am

Por cierto,

Además si activo la clausula Design, cuando cliqueo se rompe la aplicación.

No se si actualmente no se puede usar Design.
Un Saludo,
Joaquín Martínez
jmartial
 
Posts: 458
Joined: Tue Mar 14, 2006 7:26 pm

Re: Problema o Bug TSAY

Postby jmartial » Sun Feb 01, 2015 11:05 pm

Antonio,

He estado leyendo sobre el tema, y parece ser que setwindowtext, realmente llama a drawtext con unos estilos de alineación predefinidos.

Creo que sustituyendo en la clase Tsay, la llamada setwindowtext , por una llamada a drawtext alineada correctamente, quedaría solucionado el problema y coherente el resultado con lo que espera el programador.


¿Que te parece?
Un Saludo,
Joaquín Martínez
jmartial
 
Posts: 458
Joined: Tue Mar 14, 2006 7:26 pm

Re: Problema o Bug TSAY

Postby Antonio Linares » Mon Feb 02, 2015 7:13 am

Joaquín,

Pruébalo y nos comentas. Gracias :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41315
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Problema o Bug TSAY

Postby jmartial » Mon Feb 02, 2015 11:55 am

Buenos días Antonio,

Ya lo he probado y he analizado todas las posibilidades. El TSAY no usa setWindowText, nada más que para cambiar el Caption, pero realmente, el control se encarga de pintarlo internamente sin poder influir yo en el pintado.

La única solución que he encontrado, pero no sé como implementarla, es añadirle el estilo SS_OWNERDRAW y encargarnos nosotros del pintado.

Si me explicas el camino a seguir, lo intento. Por lo que he visto, en el método new, se añade el estilo y a partir de ahí, no pinta nada, ¿Cómo implemento el pintado?
Un Saludo,
Joaquín Martínez
jmartial
 
Posts: 458
Joined: Tue Mar 14, 2006 7:26 pm

Re: Problema o Bug TSAY

Postby Antonio Linares » Mon Feb 02, 2015 11:58 am

Joaquín,

Es preferible crear una clase nueva, en donde tengas el control total.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41315
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Problema o Bug TSAY

Postby jmartial » Mon Feb 02, 2015 12:14 pm

Ya,

Pero, ¿Como conmutamos la aplicación para que trabaje con una o con otra? Para no romper la compatibilidad.

No obstante es la mejor idea que veo, porque si en un futuro fivedit también sirve para diseñar los recursos, se necesita un control text que nos permita multilinea, alineaciones horizontales, verticales y autoajustes a su ancho y alto.

Tú me dices.
Un Saludo,
Joaquín Martínez
jmartial
 
Posts: 458
Joined: Tue Mar 14, 2006 7:26 pm

Re: Problema o Bug TSAY

Postby karinha » Mon Feb 02, 2015 1:05 pm

Code: Select all  Expand view

#Include "FiveWin.Ch"

STATIC oDlgRelog, oTimerRelog, lDesliga := .F., oWnd, oTimerPorta
STATIC oFnt, oSaida

FUNCTION RELOG()

    LOCAL oBrush
    LOCAL dDataDia := DTOC( DATE() )

    DEFINE FONT oFnt      NAME "Arial"         SIZE 08,  20 BOLD

    DEFINE DIALOG oDlgRelog FROM 3, 3 TO 20, 50                               ;
           TITLE OemToAnsi( "Gerenciador do Rel¢gio do Sistema - "  +         ;
                            "Data: " + dDataDia )                             ;
           COLORS CLR_BLACK, CLR_WHITE TRANSPARENT STYLE nOR( DS_MODALFRAME )

    oDlgRelog:lHelpIcon := .F.

    @ 005, 010 BUTTON oSaida PROMPT "&Salida" OF oDlgRelog SIZE 70, 14        ;
               ACTION ( oDlgRelog:End ) CANCEL

    oSaida:cToolTip := OemToAnsi( "Finalizar Gerenciador do Rel¢gio " )

    SET FONT OF oSaida   TO oFnt

    ACTIVATE DIALOG oDlgRelog CENTERED RESIZE16                               ;
             ON INIT( ACIONA_TIMER( oWnd ) )

    IF lDesliga  //-> Se For .T., Desligar  o TIMER.
       oTimerRelog:DeActivate()
       oTimerPorta:DeActivate()
    ENDIF

    oFnt:End()
    Release All

RETURN NIL

STATIC FUNCTION ACIONA_TIMER( oWnd )

    DEFINE TIMER oTimerPorta INTERVAL 50  OF oDlgRelog                        ;
           ACTION ACIONA_RELOGIO( oWnd )

    ACTIVATE TIMER oTimerPorta

RETURN NIL

//---------------------------------------------------------------------------//

STATIC FUNCTION ACIONA_RELOGIO( oWnd )

    LOCAL oFont

    DEFINE FONT oFont NAME "Arial" SIZE  0, -70 BOLD //-> Fonte Para o Relogio
    DEFINE FONT oFnt  NAME "Arial" SIZE 08,  20 BOLD //-> Fonte Para o BotÆo

    DEFINE TIMER oTimerRelog INTERVAL 50                                      ;
           ACTION ExibeRelogio()

    ACTIVATE TIMER oTimerRelog

    SET FONT OF oDlgRelog TO oFont
    SET FONT OF oSaida    TO oFnt

    oFont:End()

    lDesliga := .T.

    oTimerPorta:DeActivate()

RETURN NIL

STATIC FUNCTION ExibeRelogio()

    IF ISWINDOWVISIBLE( oDlgRelog:hWnd )

       oDlgRelog:Say( 3, 07, TIME(),                                         ;
                 CLR_YELLOW, CLR_BLACK,, .F. )
       // .T. Esquerda - .F. Direita da Dialog.

    ENDIF

RETURN NIL

//-> FIM DO PROGRAMA <-------------------------------------------------------//
 


João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7214
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Problema o Bug TSAY

Postby karinha » Mon Feb 02, 2015 1:07 pm

Code: Select all  Expand view

#Include "FiveWin.ch"

STATIC oTimer

FUNCTION Inicio()

    LOCAL oDlg, oSay1, oSay2
    LOCAL oFont1:=TFont():New("Ms Sans Serif",0,-8,.F.,.t.)

    SET DATE BRITISH
    SET EPOCH TO 1950
    SET CENTURY ON

    DEFINE DIALOG oDlg FROM 1,1 TO 100,345 ;
           TITLE OemToAnsi("El viacrucis de las actualizaciones") ;
           PIXEL TRANSPARENT

    oDlg:lHelpIcon := .F.

    @  05,15 SAY oSay1 PROMPT OemToAnsi("Fecha y hora actuales") OF oDlg ;
             PIXEL FONT oFont1 SIZE 100,12

    @  05,80 SAY oSay2 PROMPT ":   "+DTOC(DATE())+"  -  "+Time() OF oDlg ;
             PIXEL SIZE 100,12 FONT oFont1

    @  30,65 BUTTON "&Salir" OF oDlg PIXEL ACTION oDlg:End()

    ACTIVATE DIALOG oDlg CENTERED ON INIT ( Timer( oDlg, oSay2 ) )

    oFont1:End()
    oTimer:End()

    Release All

RETURN NIL

FUNCTION Timer( oDlg, oSay2 )

  DEFINE TIMER oTimer INTERVAL 1000 OF oDlg ;
         ACTION ( oSay2:VarPut( ":   " + DTOC(DATE())+"  -  " + ;
                  TIME() ), oSay2:Refresh() )

  ACTIVATE TIMER oTimer

RETURN NIL

//-> FIM DO PROGRAMA
 


João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7214
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 83 guests