Page 2 of 2

Re: IsAppThemed()

Posted: Thu Aug 26, 2010 5:32 pm
by Antonio Linares
Juan,

Puedes por favor proporcionar un pequeño ejemplo de código que reproduzca el error ó mostrar una imagen de la pantalla ? gracias

Re: IsAppThemed()

Posted: Fri Aug 27, 2010 8:30 am
by Juan Gálvez
Antonio,

No le demos más vueltas ...

Todos los efectos secundarios que estoy sufriendo se deben al cambio en el comportamiento de la función IsAppThemed().

Tal como hemos comentado en el transcurso de la conversación, ahora retorna .T. por el mero hecho de tener fichero manifest enlazado en el ejecutable mientras que antes requería que **además** Windows tuviera temas activos.

Personalmente me parece un poco peligroso hacer este tipo de cambios por las "toneladas" de código que pueden cambiar su comportamiento. Quizás habría sido mejor una nueva función (p.e. IsManifestIncluded()), un argumento ...

¿ Hay alguna forma de conseguir el comportamiento anterior ?

Saludos
Juan

Re: IsAppThemed()

Posted: Fri Aug 27, 2010 9:18 am
by Antonio Linares
Juan,

La razón de haber modificado la función IsAppThemed() es debido a que en Windows 7, aún teniendo los temas desactivados y mostrando la apariencia "clásica antigua" de Windows, IsAppThemed() contenida en uxtheme.dll devuelve verdadero.

En nuestro código anterior una de las comprobaciones que se hacian era:

Code: Select all | Expand


      bIsThemed = ( ( ( BOOL ) FindResource( GetResources(), MAKEINTRESOURCE( 1 ),
                          MAKEINTRESOURCE( 24 ) ) ) ||
                          ( ( BOOL ) FindResource( GetInstance(), MAKEINTRESOURCE( 1 ),
                          MAKEINTRESOURCE( 24 ) ) )  || pIsAppThemed() );
 

Pero para poder solucionar el problema anterior que te comento (apariencia clásica en Windows 7) hemos tenido que quitar la llamada a pIsAppThemed():

Code: Select all | Expand


      bIsThemed = ( ( ( BOOL ) FindResource( GetResources(), MAKEINTRESOURCE( 1 ),
                          MAKEINTRESOURCE( 24 ) ) ) ||
                          ( ( BOOL ) FindResource( GetInstance(), MAKEINTRESOURCE( 1 ),
                          MAKEINTRESOURCE( 24 ) ) ) );
 

Nosotros no hemos advertido ningún inconveniente con este cambio. Pero tu, como dices, si.

Por eso, si eres tan amable de proporcionar un ejemplo ó un pantallazo veremos la forma de solucionarlo. Si no colaboras en tan poco que te pedimos, realmente es dificil poder ayudarte :-)

Re: IsAppThemed()

Posted: Fri Aug 27, 2010 9:43 am
by Juan Gálvez
Antonio,

La razón de haber modificado la función IsAppThemed() es debido a que en Windows 7, aún teniendo los temas desactivados y mostrando la apariencia "clásica antigua" de Windows, IsAppThemed() contenida en uxtheme.dll devuelve verdadero.


Pero éso NO era así en anteriores versiones. Yo estoy probando FWH 9.01 sobre Win7 con los temas desactivados y funciona perfectamente (retorna .F.).

Nosotros no hemos advertido ningún inconveniente con este cambio. Pero tu, como dices, si.

Por eso, si eres tan amable de proporcionar un ejemplo ó un pantallazo veremos la forma de solucionarlo. Si no colaboras en tan poco que te pedimos, realmente es dificil poder ayudarte


Sí existen inconvenientes, prueba samples\TestMDI.prg con temas desactivados y verás como p.e. NO aparecen los grippers de la TBar y la TMsgBar.

En mi caso, los inconvenientes son mayores porque tenemos código de FWH modificado y algunas de esas modificaciones se apoyan en IsAppThemed().

Saludos
Juan

Re: IsAppThemed()

Posted: Fri Aug 27, 2010 10:25 am
by Antonio Linares
Juan,

Tienes razón. IsAppThemed() de uxtheme.dll funciona bien:

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

   MsgInfo( IsAppThemed() )

return nil

DLL static FUNCTION IsAppThemed() AS BOOL LIB "uxtheme.dll"
 

Vamos a buscar en estos foros la pregunta de soporte técnico que dió lugar a ese cambio para ver que pudo pasar. Gracias! :-)

Re: IsAppThemed()

Posted: Fri Aug 27, 2010 10:38 am
by Antonio Linares
De paso comentar la existencia de la función IsThemeActive() que parece no funcionar bien en uxtheme.dll:

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

   MsgInfo( IsAppThemed() )
   
   MsgInfo( IsThemeActive() )

return nil

DLL static FUNCTION IsAppThemed() AS BOOL LIB "uxtheme.dll"

DLL static FUNCTION IsThemeActive() AS BOOL LIB "uxtheme.dll"
 

IsThemeActive() devuelve verdadero aunque no hemos definido un fichero manifest para la aplicación:

http://msdn.microsoft.com/en-us/library/bb759813(VS.85).aspx