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 

Color del borde del TPanel

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Color del borde del TPanel Responder citando

Hola compañeros,

¿ Alguien sabe si hay forma de ponerle color del borde de un TPanel ?

Saludos
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Tendrías que crear un nuevo componente que descienda de TPanel y reescribir su método Paint.. o bien puedes interceptar el WM_PAINT del panel del siguiente modo:

- Añade la siguiente clase antes de la clase del Form donde tengas el panel:
Código:
class InterceptaPaint
{
    TWndMethod oldWindowProc;
    TForm* form_;
    TControl* control_;

    void __fastcall leoWindowProc(TMessage& msg)
    {
        switch (msg.Msg)
        {
            case WM_PAINT:
                oldWindowProc(msg);
                form_->OnPaint(control_);
                return;
            case WM_DESTROY:
                control_->WindowProc = oldWindowProc;
        }
        oldWindowProc(msg);
    }

public:
    InterceptaPaint(TForm* form, TControl* control)
        : form_(form), control_(control)
    {
        oldWindowProc = control->WindowProc;
        control->WindowProc = leoWindowProc;
    }

    ~InterceptaPaint()
    {
        control_->WindowProc = oldWindowProc;
    }
};

- En la parte privada del Form declara lo siguiente por ejemplo:
Código:
InterceptaPaint ipt;

- En el constructor de ese Form:
Código:
_fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
    /* Añade la siguiente línea -->> */  , ipt(this, Panel1)
{
    //...
}

- Y finalmente en el evento "OnPaint" del Form:
Código:
if (Sender == Panel1)
{
    TControlCanvas* canvas = new TControlCanvas;
    canvas->Control = Panel1;
        // Ahora podemos usar 'canvas' para pintar dentro del panel
    canvas->Brush->Color = clRed;
    canvas->FrameRect(Panel1->ClientRect);
        // ...
    delete canvas;
}

Espero que se haya entendido el ejemplo...


(Este mismo método para interceptar WM_PAINT lo puedes usar con cualquier componente)
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

_Leo:

Si entendí perfectamente el código, voy a irme por crear mejor un nuevo componente para tenerlo para futuras aplicaciones.

Si tengo dudas te estaré molestando, jejeje, mil gracias como siempre.

Saludos
Edwin
Volver arriba
Ver perfil de usuario Enviar mensaje privado
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.