 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
edwinhp2 Lt JG

Registrado: 19 Nov 2005Mensajes: 67
|
Publicado: Mar 25 Mar, 2008 5:14 am Asunto: Componente derivado de TStaticText |
|
|
Hola compañeros Builderos,
Estoy haciendo un componente derivado de un StaticText, para poder detectar el mensaje producido cuando nos cambiamos de tipo de estilo en windows XP (azul, verde, silver) pero no me funciona.
A ver si me pueden echar una mano, les anexo el código:
[code]
//---------------------------------------------------------------------------
#include <Registry.hpp>
#include <vcl.h>
#pragma hdrstop
#include "ThemeLabel.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
// ValidCtrCheck is used to assure that the components created do not have
// any pure virtual functions.
//
#define c_Blue 0xA06437
#define c_Green 0x548973
#define c_Silver 0x916F70
static inline void ValidCtrCheck(TThemeLabel *)
{
new TThemeLabel(NULL);
}
//---------------------------------------------------------------------------
__fastcall TThemeLabel::TThemeLabel(TComponent* Owner)
: TStaticText(Owner)
{
TMessage msg;
CambioTema(msg);
}
//---------------------------------------------------------------------------
void __fastcall TThemeLabel::CambioTema(TMessage&)
{
this->Font->Style = this->Font->Style << fsBold;
this->Font->Color = GetXPThemeColor();
this->Invalidate();
}
TlWinXPColorScheme __fastcall TThemeLabel::GetXPStyleColorScheme(void)
{
TRegistry* Registry;
AnsiString strResp;
TlWinXPColorScheme resp;
try
{
Registry = new TRegistry;
Registry->RootKey = HKEY_CURRENT_USER;
Registry->OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\ThemeManager",true);
resp = (TlWinXPColorScheme)lcsNone;
strResp = Registry->ReadString("ThemeActive");
if ( strResp == "1" )
{
strResp = Registry->ReadString("ColorName");
if ( strResp == "NormalColor" )
resp = (TlWinXPColorScheme)lcsBlue;
else if ( strResp == "HomeStead" )
resp = (TlWinXPColorScheme)lcsOliveGreen;
else if ( strResp == "Metallic" )
resp = (TlWinXPColorScheme)lcsSilver;
}
}
__finally
{
delete Registry;
}
return resp;
}
TColor __fastcall TThemeLabel::GetXPThemeColor(void)
{
TColor resp;
switch( GetXPStyleColorScheme() )
{
case lcsNone:
resp = (TColor)clBlack;
break;
case lcsBlue:
resp = (TColor)c_Blue;
break;
case lcsOliveGreen:
resp = (TColor)c_Green;
break;
case lcsSilver:
resp = (TColor)c_Silver;
break;
}
return resp;
}
namespace Themelabel
{
void __fastcall PACKAGE Register()
{
TComponentClass classes[1] = {__classid(TThemeLabel)};
RegisterComponents("General", classes, 0);
}
}
//---------------------------------------------------------------------------[/code]
y el código del H
[code]
//---------------------------------------------------------------------------
#ifndef ThemeLabelH
#define ThemeLabelH
//---------------------------------------------------------------------------
#include <SysUtils.hpp>
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
//---------------------------------------------------------------------------
typedef enum
{
lcsNone,
lcsBlue,
lcsOliveGreen,
lcsSilver
}TlWinXPColorScheme;
class PACKAGE TThemeLabel : public TStaticText
{
private:
TlWinXPColorScheme __fastcall GetXPStyleColorScheme(void);
TColor __fastcall GetXPThemeColor(void);
protected:
void __fastcall CambioTema(TMessage&);
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_THEMECHANGED,TMessage,CambioTema)
END_MESSAGE_MAP(TStaticText);
public:
__fastcall TThemeLabel(TComponent* Owner);
__published:
};
//---------------------------------------------------------------------------
#endif[/code]
Gracias por sus comentarios.
Saludos !!! |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Mie 26 Mar, 2008 12:50 am Asunto: |
|
|
Siguiendo "http://msdn2.microsoft.com/en-us/library/ms632650(VS.85).aspx" <-- este enlace de la ayuda de MSDN sobre el tema, el mensaje que estas usando solo determina si se ha realizado o no un cambio de Theme pero no retorna ningun valor con respecto a que theme se ha establecido.
asi mismo citando la ayuda
| Cita: | | Note An application must never send this message. It is only posted by the operating system. |
Indicando que este mensaje solo puede ser enviado por mismo sitema operativo.
dentro de la misma ayuda tambien dice que el mensaje NO retorna ningun valor.
Saludos _________________
 |
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|