Einzelnen Beitrag anzeigen

neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#2

Re: Interface, Einsteigerproblem?

  Alt 23. Mär 2004, 21:18
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
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat