Ver Mensaje Individual
  #9  
Antiguo 06-09-2004
Virata Virata is offline
Registrado
 
Registrado: sep 2004
Posts: 7
Reputación: 0
Virata Va por buen camino
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
Responder Con Cita