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 

Cambiar color al borde de un TGroupBox

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Cambiar color al borde de un TGroupBox Responder citando

Alguien sabe como puedo cambiar el color del borde de un TGroupBox. He buscado por el foro pero no encuentro nada al respecto.

ciao.
_________________
OJO!! Ya tenemos subforo de Bases de Datos!!
Gracias a los admins.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Puedes crear un componente sencillo derivado de TGroupBox:



Modificamos la rutina de pintado, y añadimos una nueva propiedad llamada "RectColor" que usaremos para el color de las líneas.

Código:
/////////////////////////////// MiGroupBox.h ////////////////////////////////
//---------------------------------------------------------------------------
#ifndef MiGroupBoxH
#define MiGroupBoxH
//---------------------------------------------------------------------------
#include <SysUtils.hpp>
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
//---------------------------------------------------------------------------
class PACKAGE TMiGroupBox : public TGroupBox
{
private:
    TColor RectColor_;
    void __fastcall SetColor(TColor value);
protected:
   virtual void __fastcall Paint(void);
public:
    __fastcall TMiGroupBox(TComponent* Owner);
__published:
    __property TColor RectColor={read=RectColor_,write=SetColor,default=clBlack};
};
//---------------------------------------------------------------------------
#endif

Código:
/////////////////////////////// MiGroupBox.cpp //////////////////////////////
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
//---------------------------------------------------------------------------
#include "MiGroupBox.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
static inline void ValidCtrCheck(TMiGroupBox*) { new TMiGroupBox(0); }
//---------------------------------------------------------------------------
__fastcall TMiGroupBox::TMiGroupBox(TComponent* Owner)
    : TGroupBox(Owner), RectColor_(clBlack)
{
}
//---------------------------------------------------------------------------
void __fastcall TMiGroupBox::Paint(void)
{
    Canvas->Font = Font;
    //--- Calculamos el rectangulo
    int h = Canvas->TextHeight("0");
    TRect r(0, h / 2 - 1, Width, Height);
    //--- Dibujamos el rectangulo
    Canvas->Brush->Color = Color;
    Canvas->Pen->Color = RectColor;
    Canvas->Rectangle(r);
        // Podemos cambiar la línea anterior por la siguiente
        // si queremos que tenga los bordes redondeados
        // Canvas->RoundRect(r.Left, r.Top, r.Right, r.Bottom, 9, 9);
    //--- Pintamos el texto
    if (!Text.IsEmpty()) {
        r = Rect(8, 0, 0, h);
        UINT flags = DT_SINGLELINE;
        DrawText(Canvas->Handle, Text.c_str(), -1, &r, flags | DT_CALCRECT);
        DrawText(Canvas->Handle, Text.c_str(), -1, &r, flags);
    }
}
//---------------------------------------------------------------------------
void __fastcall TMiGroupBox::SetColor(TColor value)
{
    if (RectColor_ != value) {
        RectColor_ = value;
        Invalidate();
    }
}
//---------------------------------------------------------------------------
namespace Migroupbox
{
    void __fastcall PACKAGE Register()
    {
         TComponentClass classes[1] = {__classid(TMiGroupBox)};
         RegisterComponents("Samples", classes, 0);
    }
}
//---------------------------------------------------------------------------


(Probado en BCB6 y 2009. Para que funcione en la versión 2009 cambiar "Text.c_str()" por "Text.t_str()")
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Muchas gracias _Leo, como siempre da gusto saber que estas al otro lado...

Gracias de verdad!
_________________
OJO!! Ya tenemos subforo de Bases de Datos!!
Gracias a los admins.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

¿_Leo es posible realizar esta misma operación para un TPanel pero sin crear un PACKAGE?

Es decir usando "clases sobrepuestas" para solo agregar el archivo al proyecto y que todos los TPanel tengan esa forma de esquinas redondeandas.

Nota. al parecer esa es la forma en que trabajan los Skins para componentes.

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.