Page 1 of 1
2007 style question
Posted: Tue Dec 04, 2007 8:52 am
by Dietmar Jahnel
Is there a way to check if someone uses "classical windows" desighn in XP or Vista ?
IsAppThemed() still returns .T.
In this case menu and messagebar are 2007 style, dialogs look "old" which gives a strange look in that combination.
Regards,
Dietmar
Posted: Tue Dec 04, 2007 10:33 am
by Antonio Linares
Dietmar,
> IsAppThemed() still returns .T.
IsAppThemed() just checks is the themes manifest file is included in the EXE
We need to find a way to detect if the user has the classic look
Posted: Tue Dec 04, 2007 1:14 pm
by Dietmar Jahnel
We need to find a way to detect if the user has the classic look
That's what I was looking for
!
Hope you can find a way!
Regards,
Dietmar
Posted: Tue Dec 04, 2007 3:14 pm
by Antonio Linares
Dietmar,
Google is our friend
>
One possibility would be to check the value of ThemeActive in the registry under: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ThemeManager
I believe a value of 0 means that no themes are in use (Windows Classic Style) and a value of 1 means that themes are in use (Windows XP style).
>
Posted: Tue Dec 04, 2007 3:18 pm
by Antonio Linares
Dietmar,
More results
>
Call OpenThemeData. This will return a handle to the theme, which, if NULL indicates that the visual style manager is disabled or there is no information for that control, which means that you should continue to draw using your default routines.
>
Posted: Tue Dec 04, 2007 4:22 pm
by James Bott
Antonio,
>Call OpenThemeData
Is that an existing FW or Harbour function, or is it an API?
James
Posted: Tue Dec 04, 2007 4:48 pm
by Dietmar Jahnel
>Call OpenThemeData
Antonio,
could you please post the code to do that.
We are about to release a new version of our software...
Thanks,
Dietmar
Posted: Tue Dec 04, 2007 10:46 pm
by Enrico Maria Giordano
James Bott wrote:Is that an existing FW or Harbour function, or is it an API?
It's an API:
Code: Select all
HTHEME OpenThemeData( HWND hwnd, LPCWSTR pszClassList );
EMG
Posted: Tue Dec 04, 2007 11:59 pm
by Antonio Linares
Dietmar,
Here you have a working sample:
Code: Select all
function Main()
MsgInfo( IsThemeActive() )
return nil
#pragma BEGINDUMP
#include <windows.h>
#include <hbapi.h>
typedef BOOL ( * PFISTHEMEACTIVE ) ( void );
HB_FUNC( ISTHEMEACTIVE )
{
HINSTANCE hDLL = LoadLibrary( "UxTheme.dll" );
PFISTHEMEACTIVE IsThemeActive;
if( hDLL == NULL )
{
hb_retl( FALSE );
return;
}
else
IsThemeActive = ( void * ) GetProcAddress( hDLL, "IsThemeActive" );
if( IsThemeActive )
hb_retl( IsThemeActive() );
else
hb_retl( FALSE );
FreeLibrary( hDLL );
}
#pragma ENDDUMP
Posted: Thu Dec 06, 2007 3:53 pm
by Dietmar Jahnel
nice - that's it!
But I noticed that there seems to be a little painting problem with bars without themes. Right of the bitmaps there is a darker grey...
I send the image to your per mail
Regards,
Dietmar
Posted: Thu Dec 06, 2007 5:26 pm
by Antonio Linares
Dietmar,
If you don't use the 2007 clause then you have to use the 3D clause to get the colors and painting that you want
Posted: Thu Dec 06, 2007 6:27 pm
by Dietmar Jahnel
Many Thanks, now the look is consistent with and without themes!
Dietmar