unit frmMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
IBaseInterface =
Interface
procedure free;
End;
ISomeInterface =
interface(IBaseInterface)
procedure ShowZahl;
function Get_Zahl: Integer;
procedure Set_Zahl(
const Value: Integer);
property Zahl : Integer
read Get_Zahl
write Set_Zahl;
end;
INameInterface =
interface(IBaseInterface)
function Get_Name:
String;
procedure Set_Name(
const Value:
String);
property Name :
String read Get_Name
write Set_Name;
end;
//==============================================================================
type
TSomeClass =
class(TPersistent, ISomeInterface, INameInterface )
private
FName :
String;
FZahl : Integer;
function Get_Name:
String;
procedure Set_Name(
const Value:
String);
function Get_Zahl: Integer;
procedure Set_Zahl(
const Value: Integer);
protected
// leere Code Implementierungen, die von IInterface implementiert sein müssen
// Referenzzählung ausgeschaltet ....
function QueryInterface(
const IID: TGUID;
out Obj): HResult;
stdcall;
function _AddRef: Integer;
stdcall;
function _Release: Integer;
stdcall;
public
property Name :
String read Get_Name
write Set_Name;
procedure ShowZahl;
constructor create;
destructor destroy;
override;
end;
//==============================================================================
type
TForm1 =
class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
//==============================================================================
implementation
//==============================================================================
{$R *.dfm}
//==============================================================================
function TSomeClass.QueryInterface(
const IID: TGUID;
out Obj): HResult;
begin end;
function TSomeClass._AddRef: Integer;
begin end;
function TSomeClass._Release: Integer;
begin end;
//==============================================================================
//==============================================================================
constructor TSomeClass.create;
begin
end;
//==============================================================================
destructor TSomeClass.destroy;
begin
showmessage('
Destroy klappt auch');
inherited;
end;
//==============================================================================
function TSomeClass.Get_Name:
String;
begin
result := FName;
end;
//==============================================================================
function TSomeClass.Get_Zahl: Integer;
begin
result := FZahl;
end;
//==============================================================================
procedure TSomeClass.ShowZahl;
begin
showmessage('
Test Method ShowZahl - Zahl: ' + inttostr(FZahl));
end;
//==============================================================================
procedure TSomeClass.Set_Name(
const Value:
String);
begin
FName := Value;
end;
//==============================================================================
procedure TSomeClass.Set_Zahl(
const Value: Integer);
begin
FZAhl := Value;
end;
//==============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
SomeInt : ISomeInterface;
NameInt : INameInterface;
SomeObj : TSomeClass;
begin
SomeInt := TSomeClass.create;
SomeInt.Zahl := 5;
SomeInt.ShowZahl;
// folgender Code macht nicht das, was er soll ....
NameInt := INameInterface(SomeInt);
NameInt.
Name := '
Testname';
showmessage(NameInt.
Name);
// das funktioniert wieder ...
SomeInt.free;
end;
end.