Hola!
Estoy intentando comprender las interfaces, mas o menos lo tengo controlado, pero cuando me complico un poco me empiezan a salir errores raros (para mi).
Bueno, he simplificado mi problema a una pequeña aplicación de interfaces y me gustaría saber xq falla, la idea del programa es que tiene un objeto 2 interfaces. Por otra parte tengo 2 TListBox y 2 botones, el de arriba va creado objetos y metiendolos en una lista. y el de abajo, después de haber pulsado varias veces al de arriba, mostraría el contenido de la lista de objetos creado en los TListBox, cada objeto como tiene 2 interfaces, cada uno se usa para guardar un nº, con lo q luego aparecería en los TListBox divididos según el interfaz q sea. En esta versión cambie de un TList a TInterfaceList gracias al consejo del Moderador Roman. Pero no se solucionó del todo el problema y sigue fallando.
Me gustaría saber xq falla y así por una parte conocer mejor las interfaces y por otra poder aplicarlo a mis aplicaciones.
Gracias por las molestias y un saludo.
Código Delphi
[-]
unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type
INotas = interface ['{F5F6273D-A9C9-44C5-A666-A4F607E18374}']function getValor: Integer;
end;
INotas2 = interface ['{ADDD2B20-BC87-11D9-9718-0050FCAA723B}']function getValor2: Integer;
end;
TMisNotas = class(TInterfacedObject, INotas, INotas2)
private
numnotas, numnotas2: Integer;
public
constructor Create;
destructor Destroy;
function getValor: Integer;
function getValor2: Integer;
end;
TForm1 = class(TForm)
Boton: TButton;
Lista: TListBox;
Boton2: TButton;
Lista2: TListBox;
procedure BotonClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Boton2Click(Sender: TObject);
private
MiLista: TInterfaceList; procedure meterObjetoEnLista(interfaz: INotas);
procedure meterObjetoEnLista2(interfaz: INotas2);
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
constructor TMisNotas.Create;
begin
inherited Create;
numnotas := Random(100);
numnotas2 := 100 + Random(100);
end;
destructor TMisNotas.Destroy;
begin
inherited Destroy;
end;
function TMisNotas.
getValor: Integer;
begin
Result := numnotas;
end;
function TMisNotas.getValor2: Integer;
begin
Result := numnotas2;
end;
procedure TForm1.BotonClick(Sender: TObject);
var
Objeto: TMisNotas;
begin
MiLista.Add(TMisNotas.Create);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Randomize;
MiLista := TInterfaceList.Create;
end;
procedure TForm1.meterObjetoEnLista(interfaz: INotas);
begin
Lista.Items.Add(IntToStr(interfaz.getValor));
end;
procedure TForm1.meterObjetoEnLista2(interfaz: INotas2);
begin
Lista2.Items.Add(IntToStr(interfaz.getValor2));
end;
procedure TForm1.Boton2Click(Sender: TObject);
var i, cont: Integer;
begin
Lista.Clear;
Lista2.Clear;
cont := MiLista.Count;
if (cont > 0) then
for i := 0 to cont - 1 do begin
meterObjetoEnLista(INotas(MiLista.Items[i]));
meterObjetoEnLista2(INotas2(MiLista.Items[i]));
end;
end;
end.