Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Go Back   Foros Club Delphi > Principal > OOP
Register FAQ Members List Calendar Guía de estilo Search Today's Posts Mark Forums Read

Coloboración Paypal con ClubDelphi

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 18/10/2015
MAXIUM's Avatar
MAXIUM MAXIUM is offline
Miembro
 
Join Date: May 2005
Posts: 1,503
Poder: 23
MAXIUM Va camino a la fama
Crear un componente derivado de TGroupBox

Hola a todos,

La verdad es que ya me he leído algunos tutoriales y revisado la web, pero no me sale lo que quiero

Lo que intento, es crear un nuevo componente derivado de TGroupBox y agregarle la propiedad de poder cambiarle el color de los bordes. Seria fácil instalar un componente de terceros, pero la idea es aprender

Si no es mucha la molestia, también me gustaría para este nuevo componente:
- Cambiar color de los bordes.
- Caption dentrado o que permita el alineamiento.
- Bordes redondeados.
- Eliminar todos los bordes a excepción del superior.

Eso no'h más
Reply With Quote
  #2  
Old 18/10/2015
MAXIUM's Avatar
MAXIUM MAXIUM is offline
Miembro
 
Join Date: May 2005
Posts: 1,503
Poder: 23
MAXIUM Va camino a la fama
Actualización
========

Hasta el momento he conseguido un bonito rectángulo con el color del borde a gusto. Voy avanzando

Código Delphi [-]
unit GroupBoxEX;

interface

uses
  SysUtils, Classes, Controls, StdCtrls, Graphics;

type
  TGroupBoxEX = class(TGroupBox)
  private
    { Private declarations }
    FBorderColor: TColor;
    procedure SetBorderColor(Value:TColor);
  protected
    { Protected declarations }
    procedure Paint; override;
  public
    { Public declarations }
    constructor Create(AOwner:TComponent); override;
  published
    { Published declarations }
    property BorderColor: TColor read FBorderColor Write SetBorderColor Default clBlack;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Personales', [TGroupBoxEX]);
end;

constructor TGroupBoxEX.Create(AOwner:TComponent);
begin
     inherited;
     FBorderColor:= clBlack;
end;

procedure TGroupBoxEX.SetBorderColor(Value:TColor);
begin
     If FBorderColor <> Value Then
     Begin
          FBorderColor:= Value;
          Invalidate;
     End;
end;

procedure TGroupBoxEX.Paint;
var
   X, Y, W, H: Integer;
begin
     With Canvas Do
     Begin

       // Pluma
          Pen.Width:= 1;
          Pen.Color:= BorderColor;

       // Brocha
          Brush.Color:= Color;
          Brush.Style:= bsSolid; //Relleno Sólido

          X:= Pen.Width div 2;
          Y:= X;
          W:= Width - Pen.Width + 1;
          H:= Height - Pen.Width + 1;

          FillRect(ClientRect);
         
          Brush.Style:= bsClear; //Relleno Sólido

          Rectangle(X, Y, X + W, Y + H);
     End;
End;

end.
Reply With Quote
  #3  
Old 18/10/2015
ecfisa's Avatar
ecfisa ecfisa is offline
Moderador
 
Join Date: Dec 2005
Location: Tres Arroyos, Argentina
Posts: 10,508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola MAXIUM.

Un empujón mas...
Código Delphi [-]
unit GroupBoxPlus;

interface

uses
  Windows, Graphics, Classes, Controls, Messages, StdCtrls;

type
  TGroupBoxPlus = class(TGroupBox)
  private
    FBorderColor : TColor;
    FBorderWidth : Integer;
    FBorderRound : Boolean;
    FBorderCurve : Integer;
    procedure SetBorderColor(const Value: TColor);
    procedure SetBorderWidth(const Value: Integer);
    procedure SetBorderCurve(const Value: Integer);
    procedure SetBorderRound(const Value: Boolean);
    //...
  protected
    procedure Paint; override;
    //...
  published
    constructor Create(AOwner: TComponent); override;
    property BorderColor: TColor  read FBorderColor write SetBorderColor default clBlack;
    property BorderWidth: Integer read FBorderWidth write SetBorderWidth default 1;
    property BorderRound: Boolean read FBorderRound write SetBorderRound default False;
    property BorderCurve: Integer read FBorderCurve write SetBorderCurve default 20;
   //...
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Ejemplo', [TGroupBoxPlus]);
end;

constructor TGroupBoxPlus.Create(AOwner: TComponent);
begin
  inherited;
  FBorderColor := clBlack;
  FBorderWidth := 1;
  FBorderRound := False;
  FBorderCurve := 20;
end;

procedure TGroupBoxPlus.SetBorderColor(const Value: TColor);
begin
  if Value <> FBorderColor then
  begin
    FBorderColor := Value;
    Invalidate;
  end;
end;

procedure TGroupBoxPlus.SetBorderWidth(const Value: Integer);
begin
  if Value <> FBorderWidth then
    if (Value > 0) and (Value < 6) then
    begin
      FBorderWidth := Value;
      Invalidate;
    end;
end;

procedure TGroupBoxPlus.SetBorderRound(const Value: Boolean);
begin
  if Value <> FBorderRound then
  begin
    FBorderRound := Value;
    Invalidate;
  end;
end;

procedure TGroupBoxPlus.SetBorderCurve(const Value: Integer);
begin
  if FBorderCurve <> Value then
    if (Value > 0) and (Value < 31) then
    begin
      FBorderCurve := Value;
      Invalidate;
    end;
end;

procedure TGroupBoxPlus.Paint;
var
  mH, H, W, X, Y: Integer;
  R: TRect;
begin
  Canvas.Pen.Color := FBorderColor;
  Canvas.Pen.Width := FBorderWidth;
  X := Canvas.Pen.Width div 2;
  Y := Canvas.Pen.Width div 2;
  W := Width;
  H := Height;
  Canvas.Font := Self.Font;
  mH := Canvas.TextHeight(Caption) div 2;
  Canvas.Brush.Style := bsClear;
  if not FBorderRound then
    Canvas.Rectangle(X, Y + mH, W-X, H-Y-2)
  else
    Canvas.RoundRect(X, Y + mH, W-X, H-Y-2, FBorderCurve, FBorderCurve);
  Canvas.Font := Self.Font;
  R := Rect(20, 0, 20 + Canvas.TextWidth(Caption), Canvas.TextHeight(Caption));
  Canvas.Brush.Color := Color;
  Canvas.Brush.Style := bsSolid;
  Canvas.FillRect(R);
  DrawText(Canvas.Handle, PChar(Caption), -1, R,
    DT_CENTER or DT_VCENTER or DT_NOPREFIX or DT_SINGLELINE);
end;

//...
end.
El código no hace todo los puntos que solicitas, está en bruto y seguramente tengas que pulirlo un poco. Pero espero que te aporte algunas ideas.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Last edited by ecfisa : 19/10/2015 at 00:26.
Reply With Quote
Reply


Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Problema en la creación de componente derivado de TEdit. Angel Fernández OOP 7 09/06/2008 19:53
Impedir edición en un componente derivado de TCustomComboBox MON___ OOP 2 21/11/2007 17:38
Construir un componente derivado de DBLookupCombo JulioGO OOP 0 11/10/2004 17:28
Problema con Componente derivado de TPanel y Botones Critter Varios 4 05/09/2004 11:08
Componente derivado de DBEdit que active un hint con un dato específico HombreSigma OOP 4 15/07/2003 11:42


All times are GMT +2. The time now is 21:10.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi