Ich versteht zwar noch nicht so ganz was du im Detail willst, aber ein paar Änderungen
Delphi-Quellcode:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
ITest1 =
interface
an dieser Stelle Strg+Shift+G drücken
procedure Test1;
end;
ITest2 =
interface
an dieser Stelle Strg+Shift+G drücken
procedure Test2;
end;
TBaseClass =
class(TInterfacedObject, ITest1)
public
procedure Test1;
virtual;
end;
TTestClass =
class(TBaseClass, ITest2)
public
procedure Test2;
procedure Test1;
override;
end;
TForm1 =
class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TTestClass }
procedure TTestClass.Test1;
begin
inherited;
if Self
is ITest2
then
(Self
as ITest2).Test2;
// meinst du Sowas
ShowMessage('
TTestClass.Test1;');
end;
procedure TTestClass.Test2;
begin
ShowMessage('
TTestClass.Test2;');
end;
{ TBaseClass }
procedure TBaseClass.Test1;
begin
ShowMessage('
TBaseClass.Test1;');
end;
procedure TForm1.Button1Click(Sender: TObject);
//var aClass: TTestClass;
var aClass: TBaseClass;
aInterface1: ITest1;
aInterface2: ITest2;
begin
aClass := TTestClass.Create;
aInterface1 := aClass
as ITest1;
// verwendet QueryInterface
aInterface2 := aClass
as ITest2;
// verwendet QueryInterface
aInterface1.Test1;
aInterface2.Test2;
end;
end.
Eigenlich sind Interface's dazu da verschieden Klassen eine gemeinsamme Menge zu geben.
z.B.
Delphi-Quellcode:
type
ITest = interface (IUnknown)
Strg+Shift+G
procedure Test1;
end;
TMyEdit = class (TEdit, ITest)
...
end;
TMyButton = class (TButton, ITest)
...
end;
TMyLabel = class (TLabel, ITest)
...
end;
Anwendung
Delphi-Quellcode:
if Controls[i] is ITest then // Unterstütz dieses Control Test
(txtTest as ITest).Test;
ODER
Man verwendet sie als einheitliche Schnittstelle in
Dll's ->
COM