Hola de nuevo.
Os voy a poner el codigo de prueba que estoy realizando.
Esta es la interface:
Código:
unit MyInterface;
interface
type
IMyInterface = interface ['{6E93F07C-AD0C-494B-85BC-A960AF01EF0A}']
procedure HacerAlgo();
end;
implementation
end.
Esta es la clase, hereda de TTimer por heredar de algo. En la realidad heredará de TGraphicControl.
Código:
unit MyClass;
interface
uses QExtCtrls,Dialogs,MyInterface;
type
TMyClass=Class(TTimer,IMyInterface)
procedure HacerAlgo();
end;
implementation
procedure TMyClass.HacerAlgo();
begin
showmessage('Estoy haciendo algo');
end;
end.
y este es el código del form con el boton.
Código:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,ExtCtrls,MyClass,MyInterface ;
type
TForm1 = class(TForm)
Button1: TButton;
Timer1: TTimer;
procedure Button1Click(Sender: TObject);
procedure Miprocedimiento(Objeto:TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
MiClase:TMyClass;
begin
MiClase:=TMyClass.create(self);
MiProcedimiento(MiClase);
MiClase.Free;
end;
procedure TForm1.Miprocedimiento(Objeto:TObject);
begin
if Supports(Objeto,IMyInterface) then
(Objeto as IMyInterface).HacerAlgo();
end;
end.
Si en MiProcedimiento recibo el parámetro Objeto como TMyClass, funciona bien, pero no tiene gracia ya que este procedimiento debe aceptar cualquier tipo de objeto.
En el caso de declarar Objeto como TObject, se produce el siguiente error de compilación:"Operator not aplicable to this operand type" en la línea "(Objeto as IMyInterface).HacerAlgo();" y es por la sentencia
as
Puedo hacer typecast a Objeto para que sea TMyClass, pero el problema es que no todos los objetos que recibirá será TMyClass.
No se como puedo arreglarlo.
Gracias de nuevo.
Salu22222