unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
TKreis =
class
private
fX,fY,fD: Integer;
public
constructor create ( aX, aY, aD: Integer );
procedure erscheinen( aForm : TForm );
procedure verschwinden( aForm : TForm );
// Eigenschaften - readonly, weil auf eine externe Veränderung keine Reaktion implementiert ist
property X : integer
read fX;
property Y : integer
read fY;
property D : integer
read fD;
end;
{ TForm1 }
TForm1 =
class(TForm)
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
procedure Button1Click( Sender: TObject );
procedure Button2Click( Sender: TObject );
private
{ private declarations }
fKreis : TKreis;
public
{ public declarations }
property Kreis : TKreis
read fKreis;
end;
var
Form1: TForm1;
// globale Variablen gehen ja gar nicht
// Kreis: TKreis;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click( Sender: TObject );
begin
// Wenn es eine Instanz von Kreis gibt, dann diese Instanz auch wieder freigeben, sonst Speicherleck!!!
if Assigned( fKreis )
then
fKreis.Free;
// Das Form1.Edit... ist sowas von falsch, denn bei einer weiteren Instanz von TForm1 funktioniert das nicht mehr
// Was noch gehen würde wäre Self.Edit1.Text
fKreis := TKreis.Create( StrToInt( Edit1.Text ), StrToInt( Edit2.Text ), StrToInt( Edit3.Text ) );
// Self ist die Referenz auf die aktuelle Klassen-Instanz und somit an dieser Stelle diese Formular-instanz
Kreis.erscheinen( Self );
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
// Wenn es eine Instanz Kreis gibt, dann die Methode aufrufen, sonst gibt es Zugriffsverletzungen!!!
if Assigned( Kreis )
Kreis.verschwinden( Self );
end;
{ TKreis }
constructor TKreis.create ( aX, aY, aD: Integer );
begin
inherited Create;
// nur zur Vorsicht, falls TObject mal einen speziellen Constructor bekommt
fX := aX;
fY := aY;
fD := aD;
end;
procedure TKreis.verschwinden( aForm : TForm );
begin
aForm.Refresh;
end;
procedure TKreis.erscheinen( aForm : TForm );
begin
verschwinden( aForm );
aForm.Canvas.Ellipse( X, Y, X + D, Y + D );
end;
end.