...die Farbe eines TPageControls ändern?

Autor: P. Below
Homepage: http://www.teamb.com

Kategorie: Dateien

{...}

type
  
TTabSheet = class(ComCtrls.TTabSheet)
  private
    
FColor: TColor;
    procedure SetColor(Value: TColor);
    procedure WMEraseBkGnd(var Msg: TWMEraseBkGnd);
      message WM_ERASEBKGND;
  public
    constructor 
Create(aOwner: TComponent); override;
    property Color: TColor read FColor write SetColor;
  end;

type
  
TForm1 = class(TForm)
    Button1: TButton;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    TabSheet3: TTabSheet;
    procedure PageControl1DrawTab(Control: TCustomTabControl;
      TabIndex: Integer; const Rect: TRect; Active: Boolean);
    procedure FormCreate(Sender: TObject);
  private
    
{ Private declarations }
  
public
    
{ Public declarations }
  
end;

var
  
Form1: TForm1;

implementation

{$R *.dfm}

constructor TTabSheet.Create(aOwner: TComponent);
begin
  inherited
;
  FColor := clBtnFace;
end;

procedure TTabSheet.SetColor(Value: TColor);
begin
  if 
FColor <> Value then
  begin
    
FColor := Value;
    Invalidate;
  end;
end;

procedure TTabSheet.WMEraseBkGnd(var Msg: TWMEraseBkGnd);
begin
  if 
FColor = clBtnFace then
    inherited
  else
  begin
    
Brush.Color := FColor;
    Windows.FillRect(Msg.dc, ClientRect, Brush.Handle);
    Msg.Result := 1;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  
Tabsheet1.Color := clWhite;
  TabSheet2.Color := clLime;
end;

// PageControl1.OwnerDraw := True !

procedure TForm1.PageControl1DrawTab(Control: TCustomTabControl;
  TabIndex: Integer; const Rect: TRect; Active: Boolean);
var
  
AText: string;
  APoint: TPoint;
begin
  with 
(Control as TPageControl).Canvas do
  begin
    
Brush.Color := ClGreen;
    FillRect(Rect);
    AText := TPageControl(Control).Pages[TabIndex].Caption;
    with Control.Canvas do
    begin
      
APoint.x := (Rect.Right - Rect.Left) div 2 - TextWidth(AText) div 2;
      APoint.y := (Rect.Bottom - Rect.Top) div 2 - TextHeight(AText) div 2;
      TextRect(Rect, Rect.Left + APoint.x, Rect.Top + APoint.y, AText);
    end;
  end;
end;

end.

 

printed from
www.swissdelphicenter.ch
developers knowledge base