Qual Campo e qual Índice foi usado da Classe Ancestral?

22/11/2005

tenho a seguinte estrutura de classes em um Form
type
  TClube = class
    GolsCod: array of Smallint;
    ...
    ...

  Public
    procedure Add_Gol (Cod_Jogador: Smallint);

  end;

type
  TConfronto = class
    Clube_1: TClube;
    Clube_2: TClube;
    ...
    ...

  end;


declaro também uma variável do tipo array de TConfronto
implementation

uses

var
  Confrontos: array of TConfronto;


quando vou disparar o evento Add_Gol faço o seguinte:
  Confrontos[0&93;.Clube_1.Add_Gol(10);


preciso saber duas doisas:

1- Dentro do procedimento Add_Gol como faço para saber se quem disparou foi o Clube_1 ou o Clube_2?

2- Dentro do procedimento Add_Gol como faço para saber qual o índice de Confrontos? (neste caso 0)?


Raserafim

Respostas

22/11/2005

Siam

1- Dentro do procedimento Add_Gol como faço para saber se quem disparou foi o Clube_1 ou o Clube_2?
Pelo Self do método.
2- Dentro do procedimento Add_Gol como faço para saber qual o índice de Confrontos? (neste caso 0)?
Passe o índice como parâmetro.


Responder Citar

23/11/2005

Raserafim

siam não dá certo não.
pelo Self consigo saber a classe, mas não o campo que a chamou.


Responder Citar

23/11/2005

Siam

Passando o índice:
Confrontos[0&93;.Clube_1.Add_Gol(10, 0);
procedure TClube.Add_Gol (Cod_Jogador: Smallint; ind:Integer); 
begin
  if Self = Confrontos&91;ind&93;.Clube1 then
    ...
end;
Isso não resolve ?


Responder Citar

24/11/2005

Raserafim

valeu siam, assim deu certo.
mas o índice realmente tenho que passar como parâmetro? ou dá pra descobrir tb?


Responder Citar

24/11/2005

Siam

Da maneira que vejo, vc pode não passar o índice, mas terá que fazer um [b:e154df7078]for[/b:e154df7078] no array de Confrontos até chegar no objeto desejado:
procedure TClube.Add_Gol (Cod_Jogador: Smallint); 
var i:Integer;
begin 
  for i := 0 to High(Confrontos) do
  begin
    if Self = Confrontos[i&93;.Clube1 then 
    begin
      ...
      Break;
    end
    else
    if Self = Confrontos&91;i&93;.Clube2 then 
    begin
      ...
      Break;
    end
  end;
end;
Assim quando ocorrer o Break, o [b:e154df7078]i[/b:e154df7078] será o índice.


Responder Citar

25/11/2005

Raserafim

humm valeu siam. a solução deu certinho.


Responder Citar