Einzelnen Beitrag anzeigen

sebi87
(Gast)

n/a Beiträge
 
#28

Re: vom Objekt zur Komponente

  Alt 17. Apr 2008, 17:01
Hier mal ein Teil
Delphi-Quellcode:
unit C_Ball_V2;

{- [ITNERFACE]-Teil -----------------------------------------------------------}
interface

uses Windows, Classes, Graphics ;

function PointEllipse(Mittelpunkt : TPoint ; Winkel, ARadius : integer;
 BRadius : integer = 0) : TPoint ;
function PointBezier(A, B, C, D : TPoint; Teilung, Schritt : Integer) : TPoint ;

type
{- Typendefinierung -----------------------------------------------------------}
  TSite = (lsLeft, lsRight) ;
  TPaintStyle = (psLine, psColored) ;


{- TVieleck -------------------------------------------------------------------}
  TVieleck = class
  // [PRIVATE]-Teil
  private
    Mittelpunkt : TPoint ;
    FVieleck : array of TPoint ;
    Canvas : TCanvas ;

  // [PUBLIC]-Teil
  public
    constructor Create(AMittelpunkt : TPoint; ACanvas : TCanvas) ;
    procedure Paint(AColor : TColor) ;
  end ;

{- TBall ---------------------------------------------------------------------}
  TBall = class(TComponent)
  // [PRIVATE]-Teil
  private
    FMittelpunkt : TPoint ;
    FCanvas : TCanvas ;
    Dreieck : TVieleck;

    FPaintStyle : TPaintStyle ;
    FbgColor : TColor ;
    FLineColor : TColor ;

  // [PUBLIC]-Teil
  public
    constructor Create(AOwner : TComponent) ; overload; override; // Standard-Construktor
    constructor Create(AOwner : TComponent; AMittelpunkt : TPoint;
      ACanvas : TCanvas) ; overload;
    procedure Paint ;
    procedure Clear ;
    procedure Repaint ;

  // [POTECTED]-Teil
  protected

  // [PUBLISHED]-Teil
  published
    property Canvas : TCanvas read FCanvas write FCanvas ;
    property XMittelpunkt : Integer read FMittelpunkt.x write FMittelpunkt.x ;
    property YMittelpunkt : Integer read FMittelpunkt.y write FMittelpunkt.y ;

    property PaintStyle : TPaintstyle read FPaintStyle write ChangePaintStyle ;
    property bgColor : TColor read FbgColor ;
    property LineColor : TColor read FLineColor ;
  end ;

procedure Register;

{- [IMPLEMENTATION]-Teil ------------------------------------------------------}
implementation

procedure Register;
begin
  RegisterComponents('Ball', [TBall]);
end;


{- TVieleck -------------------------------------------------------------------}

// Generiert TVieleck auf ACanvas mit AMittelpunkt
constructor TVieleck.Create(AMittelpunkt : TPoint; ACanvas : TCanvas) ;
begin
  inherited Create;
  Canvas := ACanvas ;
  Mittelpunkt := AMittelpunkt ;
end ;

// Erstellt TVieleck aus den Daten
procedure TVieleck.Paint(AColor : TColor) ;
begin
  Canvas.Pen.Width := 2 ;
  Canvas.Pen.Color := AColor ;
  Canvas.Polyline(FDreieck) ;
end ;

{- TBall ----------------------------------------------------------------------}
// Standard-Constructor
constructor TBall.Create(AOwner : TComponent) ;
begin
  inherited Create(AOwner); // geerbter Konstruktor
  FCanvas := nil ; // Zur Sicherheit
  FMittelpunkt.x := -1 ; // Zur Sicherheit
  FMittelpunkt.y := -1 ; // Zur Sicherheit

  Dreieck := TVieleck.Create(FMittelpunkt, FCanvas) ;
end ;

constructor TBall.Create(AOwner : TComponent; AMittelpunkt : TPoint;
  ACanvas : TCanvas) ;
begin
  Create(AOwner) ;
  // Standartwerte für Propertys
  FbgColor := clWhite ;
  FLineColor := clBlack ;
  FLungColor := $008B82FF ;

  FCanvas := ACanvas ;
  FMittelpunkt := AMittelpunkt ;
end ;

// Zeichent
procedure TBall.Paint ;
begin
  Dreieck.Paint(FLineColor) ;
end ;

// Löschte
procedure TBall.Clear ;
begin
  Dreieck.Paint(FbgColor) ;
end ;

// Zeichnet neu
procedure TBall.Repaint ;
begin
  // Löschen
  Clear ;
  // Neuzeichnen
  Paint ;
end ;
  Mit Zitat antworten Zitat