// Eine Komponente für ein simples rundes Panel.


// Getestet mit D4 unter XP

unit RundPanel; 
 
interface 
 
uses 
  Windows, Classes, Graphics, Controls, ExtCtrls; 
 
type 
  TRundPanel = class(TPanel) 
  private 
    rhell, rdunkel: TColor; 
    w, h: integer; 
    rct: TRect; 
    rgn: HRgn; 
  protected 
    procedure setdunkel(f: TColor); 
    procedure sethell(f: TColor); 
    procedure formen; 
  public 
    constructor Create(Owner: TComponent); override; 
    procedure Resize; override; 
    procedure Loaded; override; 
    procedure Paint; override; 
  published 
    property RandDunkel: TColor read rdunkel write setdunkel; 
    property RandHell: TColor read rhell write sethell; 
  end; 
 
procedure Register; 
 
implementation 
 
procedure Register; 
begin 
  RegisterComponents('DBR', [TRundPanel]); 
end; 
 
constructor TRundPanel.Create(Owner: TComponent); 
begin 
  inherited Create(Owner); 
  rhell := clBtnHighLight; 
  rdunkel := clBtnShadow; 
  height := 70; 
  width := 120; 
end; 
 
procedure TRundPanel.formen; 
begin 
  h := height * 2 div 3; 
  w := width * 4 div 3; 
  rgn := CreateEllipticRgn(0, 0, width, height); 
  setwindowRgn(handle, rgn, true); 
  rct := clientrect; 
  repaint; 
end; 
 
procedure TRundPanel.resize; 
begin 
  inherited; 
  formen; 
end; 
 
procedure TRundPanel.loaded; 
begin 
  inherited; 
  formen; 
end; 
 
procedure TRundPanel.sethell(f: TColor); 
begin 
  if f = rhell then exit; 
  rhell := f; 
  repaint; 
end; 
 
procedure TRundPanel.setdunkel(f: TColor); 
begin 
  if f = rdunkel then exit; 
  rdunkel := f; 
  repaint; 
end; 
 
procedure TRundPanel.paint; 
var br: integer; 
begin 
  Canvas.Font := Font; 
  with canvas do begin 
    brush.color := color; 
    fillrect(cliprect); 
    drawtext(canvas.handle, PChar(Caption), -1, rct, 
      DT_SINGLELINE or DT_CENTER or DT_VCENTER); 
    if bevelouter <> bvNone then begin 
      br := succ(bevelwidth); 
      pen.width := succ(br); 
      if bevelouter = bvLowered then 
        pen.color := rhell else 
        pen.color := rdunkel; 
      arc(0, 0, width - 1, height - 1, 0, h, w, 0); 
      if bevelouter = bvLowered then 
        pen.color := rdunkel else 
        pen.color := rhell; 
      arc(0, 0, width - 1, height - 1, w, 0, -bevelwidth, h); 
    end else br := 0; 
    if bevelinner <> bvNone then begin 
      pen.width := bevelwidth + ord(bevelouter = bvNone); 
      if bevelinner = bvLowered then 
        pen.color := rhell else 
        pen.color := rdunkel; 
      arc(br, br, width - 1 - br, height - 1 - br, 0, h - bevelwidth, w, 0); 
      if bevelinner = bvLowered then 
        pen.color := rdunkel else 
        pen.color := rhell; 
      arc(br, br, width - 1 - br, height - 1 - br, w, bevelwidth, 
        0, h - bevelwidth); 
    end; 
  end; 
end; 
 
end.



 

Zugriffe seit 6.9.2001 auf Delphi-Ecke