Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Componente derivado de TStaticText

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Componente derivado de TStaticText Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mostrar mensajes de anteriores:   
Cambiar a:  
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


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.