Array
(
)

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

Raserafim
   - 22 nov 2005

tenho a seguinte estrutura de classes em um Form
#Código


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
#Código

implementation

uses

var
Confrontos: array of TConfronto;


quando vou disparar o evento Add_Gol faço o seguinte:
#Código

Confrontos[0].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)?


Siam
   - 22 nov 2005


Citação:
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.

Citação:
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.


Raserafim
   - 23 nov 2005

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


Siam
   - 23 nov 2005

Passando o índice:#Código

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


Raserafim
   - 24 nov 2005

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


Siam
   - 24 nov 2005

Da maneira que vejo, vc pode não passar o índice, mas terá que fazer um for no array de Confrontos até chegar no objeto desejado:#Código

procedure TClube.Add_Gol (Cod_Jogador: Smallint); 
var i:Integer;
begin
for i := 0 to High(Confrontos) do
begin
if Self = Confrontos[i].Clube1 then
begin
...
Break;
end
else
if Self = Confrontos[i].Clube2 then
begin
...
Break;
end
end;
end;
Assim quando ocorrer o Break, o i será o índice.


Raserafim
   - 25 nov 2005

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