unit Unit_Main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 =
class(TForm)
Button1: TButton;
Button2: TButton;
ListBox1: TListBox;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private-Deklarationen }
procedure NameWurdeGeaendert1( Sender : TObject );
procedure NameWurdeGeaendert2( Sender : TObject; VName, NName :
string );
public
{ Public-Deklarationen }
end;
TNotifyPersonEvent =
procedure( Sender : TObject; VName, NName :
string )
of object;
TPerson =
class
private
FNName:
string;
FVName:
string;
FOnNameChange1 : TNotifyEvent;
// Definition für TNotifyEvent = procedure( Sender : TObject ) of object;
FOnNameChange2 : TNotifyPersonEvent;
procedure SetVName( Value :
string );
procedure SetNName( Value :
string );
procedure SetOnNameChange1( Value : TNotifyEvent );
procedure SetOnNameChange2( Value : TNotifyPersonEvent );
public
// Mit property geht das viel schöner :-)
// den private Bereich mal komplett leer lassen, dann
// einfach nur diese Zeilen eintippen und dann
// Shift-Ctrl-C drücken (Code-Completion) und staunen ;-)
property VName :
string read FVName
write SetVName;
property NName :
string read FNName
write SetNName;
property OnNameChange1 : TNotifyEvent
read FOnNameChange1
write SetOnNameChange1;
property OnNameChange2 : TNotifyPersonEvent
read FOnNameChange1
write SetOnNameChange1;
constructor Create;
end;
var
Form1: TForm1;
Person:TPerson;
implementation
{$R *.dfm}
constructor TPerson.Create;
begin
inherited Create;
FNName := '
';
FVName := '
';
end;
procedure TPerson.SetVName( Value :
string );
begin
FVName := Value;
if Assigned( FOnChangeName1 )
// ist das Gleiche wie: if FOnChangeName1 <> nil
then
FOnChangeName1( Self );
if Assigned( FOnChangeName2 )
then
FOnChangeName2( Self, FVName, FNName );
end;
procedure TPerson.SetNName( Value :
string );
begin
FNName := Value;
if Assigned( FOnChangeName1 )
then
FOnChangeName1( Self );
if Assigned( FOnChangeName2 )
then
FOnChangeName2( Self, FVName, FNName );
end;
procedure TPerson.SetOnNameChange1( Value : TNotifyEvent );
begin
FOnNameChange1 := Value;
end;
procedure TPerson.SetOnNameChange2( Value : TNotifyPersonEvent );
begin
FOnNameChange2 := Value;
end;
procedure TForm1.NameWurdeGeaendert1( Sender : TObject );
begin
ShowMessage( '
Der Name wurde geändert!' );
end;
procedure TForm1.NameWurdeGeaendert2( Sender : TObject; VName, NName :
string );
begin
ShowMessage( '
Der Name wurde auf ' + VName + '
' + NName + '
geändert!' );
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Person:=TPerson.Create;
Person.OnNameChange1 := NameWurdeGeaendert1;
Person.OnNameChange2 := NameWurdeGeaendert2;
Person.setName('
Test_Nachname');
Person.setFirstName('
Test_Vorname');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Listbox1.Clear;
Listbox1.Items.add(Person.getName());
Listbox1.Items.add(Person.getFirstName());
end;
end.