Page 1 of 2

IsAppThemed()

Posted: Tue Aug 24, 2010 11:45 am
by Juan Gálvez
Hola Antonio,

Como sabes, estoy probando FWH 10.07 y lo hago con el actual SVN de Harbour, Borland 5.82 y bajo Windows 7 Professional.

No sé si se trata del mismo problema que he detectado con los gripper,s pero la función IsAppThemed() está retornando siempre .T. (aún sin temas activos).

¿ Puedes comprobarlo ?

Gracias y saludos
Juan

Re: IsAppThemed()

Posted: Tue Aug 24, 2010 8:48 pm
by Antonio Linares
Juan,

Ese error se corrigió en un build publicado posteriormente. Por favor revisa este post:

http://forums.fivetechsupport.com/viewt ... ed#p102733

Re: IsAppThemed()

Posted: Wed Aug 25, 2010 7:29 am
by Juan Gálvez
Antonio,

El build que estamos usando es ése. El instalable indica FWH/FWHX 10.7 02/Aug/2010.

Recuerda que uso el SVN de Harbour y Borland C 5.82 bajo un Win7 Professional (tema Windows Clásico).

¿ Has podido mirar el asunto de los gripper,s ?

Saludos
Juan

Re: IsAppThemed()

Posted: Wed Aug 25, 2010 8:14 am
by Antonio Linares
Juan,

Mantienes un fichero manifest de temas externo ó dentro de los recursos del ejecutable ?

Prueba a quitarlo y comprueba el valor de IsAppThemed(), gracias

Re: IsAppThemed()

Posted: Wed Aug 25, 2010 9:11 am
by Antonio Linares
Juan,

En caso de que estés usando la cláusula 2007 de FWH, entonces este cambio es necesario para que se vea el "gripper" en source\classes\msgbar.prg:

Code: Select all

METHOD Paint() CLASS TMsgBar

   local aInfo := ::DispBegin()

   if ::l2007
      ::PaintBar()      
      ::Say( ::nHeight / 4 - 2,;
             If( ::lCentered, ( ( ( If( Len( ::aItem ) > 0, ::aItem[ 1 ]:nLeft(), ::nWidth ) ) ) / 2 ) - ( GetTextWidth( ::hDC,;
             If( Empty( ::cMsg ), ::cMsgDef, ::cMsg ),;
             ::oWnd:oFont:hFont ) / 2 ), 4 ),;
              If( Empty( ::cMsg ), ::cMsgDef, ::cMsg ),;
             ::nClrText,,, .T., .T. )
      ::lPainting := .T.
      ASend( ::aItem, "Paint()" )
      if ::lPaint3L
         MsgPaint3L( ::hWnd, ::nClrPane, ::hDC )  // esta línea dibuja el "gripper"
      endif   
      ::lPainting := .F.
      if ::bPainted != nil
         Eval( ::bPainted, ::hDC )
      endif
      ::DispEnd( aInfo )
      return nil
   endif

   ...
 

Re: IsAppThemed()

Posted: Wed Aug 25, 2010 2:43 pm
by Juan Gálvez
Antonio,

Cuando quito el fichero manifest de temas de los recursos del ejecutable IsAppThemed() siempre retorna .F. (aún con temas activos).

Además, sin llegar a implementar _ que me indicas ya que pruebo con ::l2007 == .F., también se pintan bien los grippers.

Ya me dirás si necesitas más pruebas ...

Saludos
Juan

Re: IsAppThemed()

Posted: Wed Aug 25, 2010 2:46 pm
by Antonio Linares
Juan,

Como puedes quitar el fichero manifest de temas y que los temas estén activos ? Me refiero en tu aplicación

La solución de poner a .F. la DATA l2007 tambien sería válida, siempre y cuando no uses la claúsula 2007

Re: IsAppThemed()

Posted: Wed Aug 25, 2010 3:13 pm
by Juan Gálvez
Antonio,

Espera que NO nos liemos :)

Me refería a temas activos en Windows 7.

Por otro lado, el código que me proporcionas ya me va bien para que se pinte el "gripper" con ::l2007 == .T. porque nuestras aplicaciones pueden ser parametrizadas para que ::l2007 se fije a .T. o .F. (a gusto del usuario).

En definitiva, lo que falta por solucionar son los 2 problemas que hemos observado que provoca tener el fichero manifest entre los recursos del ejecutable :

1) IsAppThemed() siempre retorna .T.
2) Los grippers NO se pintan

¿ no es eso ?

Saludos
Juan

Re: IsAppThemed()

Posted: Thu Aug 26, 2010 8:44 am
by Antonio Linares
Juan,

IsAppThemed() devolverá .T. si encuentra el fichero manifest bien este dentro o fuera del ejecutable. Tendriamos que ver como detectar que aunque ese fichero exista, los temas no estan activados.

Anteriormente usábamos la función IsAppThemed() de UXTHEME.DLL (Windows) pero hemos visto que siempre devuelve .T. por el hecho de que Windows este usando temas aunque nuestra aplicación no los use.

Asi que de momento una solución seria que borraseis el fichero manifest y entonces la función IsAppThemed() de FWH devolvería .F.

En cuanto al "gripper", no me comentas lineas más arriba que ya te funciona ? En que condiciones no te funciona ? gracias,

Re: IsAppThemed()

Posted: Thu Aug 26, 2010 9:57 am
by Juan Gálvez
Antonio,

Hay algo que no entiendo ...

En anteriores versiones (p.e. FWH 9.01), IsAppThemed() sólo devolvía .T. si se cumplían 2 condiciones simultáneamente :

1) El fichero manifest estaba dentro del ejecutable (fuera de él NO lo he probado).
2) Windows tenía temas activos.

¿ No es éste el comportamiento deseado ?

Respecto de los grippers, han empezado a funcionar cuando he sacado el fichero manifest del ejecutable.

Saludos
Juan

Re: IsAppThemed()

Posted: Thu Aug 26, 2010 10:20 am
by Juan Gálvez
Antonio,

A modo de prueba, he sustituido el módulo THEMES.OBJ de FIVEHC.LIB por el de la versión 9.01 y ahora tanto IsAppThemed() como los grippers funcionan correctamente.

Ya me dirás ...

Saludos
Juan

Re: IsAppThemed()

Posted: Thu Aug 26, 2010 11:19 am
by Antonio Linares
Juan,

Por lo que he entendido de tus mensajes, tu aplicación está funcionando en un Windows con temas pero tu aplicación no usa temas. Es así ?

Pongámonos de acuerdo primero en lo básico :-)

Re: IsAppThemed()

Posted: Thu Aug 26, 2010 11:46 am
by Juan Gálvez
Antonio,

Me pillaste :)

¿ Qué quieres decir si mi aplicación usa temas ?

Yo NO hago nada especial, incluyo el fichero manifest y es el propio FWH quien tiene sus comportamientos específicos si IsAppThemed() == .T. ( p.e. el uso de DrawPBack() ).

Re: IsAppThemed()

Posted: Thu Aug 26, 2010 12:07 pm
by Antonio Linares
Juan,

Al comienzo de esta conversación comentastes:
Recuerda que uso el SVN de Harbour y Borland C 5.82 bajo un Win7 Professional (tema Windows Clásico).
Que quieres decir con "tema Windows Clásico" ?

Lo más sencillo es que pongas una imagen de como se ve tu aplicación, asi nos entenderemos mejor :-)

Re: IsAppThemed()

Posted: Thu Aug 26, 2010 2:22 pm
by Juan Gálvez
Antonio,

Sólo identificaba el escenario en el que IsAppThemed() devolvía .T. y los grippers NO se pintaban.

Si no me equivoco, fijar el tema "Windows clásico" en Win7 es sinónimo de desactivar los temas y en consecuencia IsAppThemed() debería retornar .F. (así funcionaba p.e. FWH 9.01).