 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
XyVy Master


Registrado: 25 Ago 2002Mensajes: 557Ubicación: Murcia (España)
|
Publicado: Mie 11 Mar, 2009 4:39 pm Asunto: Cambiar color al borde de un TGroupBox |
|
|
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 |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Mie 11 Mar, 2009 7:13 pm Asunto: |
|
|
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 |
|
 |
XyVy Master


Registrado: 25 Ago 2002Mensajes: 557Ubicación: Murcia (España)
|
Publicado: Lun 16 Mar, 2009 11:50 am Asunto: |
|
|
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 |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Dom 03 Ene, 2010 4:58 am Asunto: |
|
|
¿_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. _________________
 |
|
| 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.
|