FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour IsAppThemed()
Posts: 14
Joined: Fri Oct 21, 2005 10:05 AM
IsAppThemed()
Posted: Tue Aug 24, 2010 11:45 AM

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

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: IsAppThemed()
Posted: Tue Aug 24, 2010 08:48 PM

Juan,

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

viewtopic.php?f=6t=19296p=102733hilit=IsAppthemed#p102733

&&&

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 14
Joined: Fri Oct 21, 2005 10:05 AM
Re: IsAppThemed()
Posted: Wed Aug 25, 2010 07:29 AM

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

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: IsAppThemed()
Posted: Wed Aug 25, 2010 08:14 AM

Juan,

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

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

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: IsAppThemed()
Posted: Wed Aug 25, 2010 09:11 AM
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 (fw): Select all Collapse
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

   ...
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 14
Joined: Fri Oct 21, 2005 10:05 AM
Re: IsAppThemed()
Posted: Wed Aug 25, 2010 02:43 PM

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 los cambios 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

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: IsAppThemed()
Posted: Wed Aug 25, 2010 02:46 PM

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

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 14
Joined: Fri Oct 21, 2005 10:05 AM
Re: IsAppThemed()
Posted: Wed Aug 25, 2010 03:13 PM

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

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: IsAppThemed()
Posted: Thu Aug 26, 2010 08:44 AM

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,

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 14
Joined: Fri Oct 21, 2005 10:05 AM
Re: IsAppThemed()
Posted: Thu Aug 26, 2010 09:57 AM

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

Posts: 14
Joined: Fri Oct 21, 2005 10:05 AM
Re: IsAppThemed()
Posted: Thu Aug 26, 2010 10:20 AM

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

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: IsAppThemed()
Posted: Thu Aug 26, 2010 11:19 AM

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 :-)

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 14
Joined: Fri Oct 21, 2005 10:05 AM
Re: IsAppThemed()
Posted: Thu Aug 26, 2010 11:46 AM

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() ).

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: IsAppThemed()
Posted: Thu Aug 26, 2010 12:07 PM
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 :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 14
Joined: Fri Oct 21, 2005 10:05 AM
Re: IsAppThemed()
Posted: Thu Aug 26, 2010 02:22 PM

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).