Zitat von
Apollonius:
ComponentToHandle muss dann logischerweise ein ITest sein.
Hallo mkinzler und Apollonius.
Vielen Dank für eure Hilfe! Ich hätte nicht gedacht, dass es so einfach geht.
Und ging jetzt ja sogar nur mit Interfaces und ohne Helferklassen (somit bleibt auch die Code-Kompatibilität)
Delphi-Quellcode:
type
ITest = interface(IInterface)
procedure MeineProzedur;
end;
TComponentA = class(TGraphicControl, ITest)
protected
procedure MeineProzedur;
end;
TComponentB = class(TWinControl, ITest)
protected
procedure MeineProzedur;
end;
THandlerComponent = class(TComponent)
private
ComponentToHandle: ITest;
public
procedure Irgendwas;
end;
procedure TComponentA.MeineProzedur;
begin
showmessage('A');
end;
procedure TComponentB.MeineProzedur;
begin
showmessage('B');
end;
procedure THandlerComponent.Irgendwas;
begin
if Assigned(ComponentToHandle) then ComponentToHandle.MeineProzedur;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
x: THandlerComponent;
a: TComponentA;
b: TComponentB;
begin
x := THandlerComponent.Create(self);
try
a := TComponentA.Create(self);
b := TComponentB.Create(self);
try
x.ComponentToHandle := a;
x.Irgendwas; // ^= Showmessage('A');
x.ComponentToHandle := b;
x.Irgendwas; // ^= Showmessage('B');
finally
a.Free;
b.Free;
end;
finally
x.Free;
end;
end;
Ich werde das ganze jetzt noch auf meinen richtigen Code umsetzen und hoffen, dass es dort auch so gut funktioniert.
Gruß
blackdrake