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

Delphi

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].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

Raserafim

Curtidas 0

Respostas

Siam

Siam

22/11/2005

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.


GOSTEI 0
Raserafim

Raserafim

22/11/2005

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


GOSTEI 0
Siam

Siam

22/11/2005

Passando o índice:
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 ?


GOSTEI 0
Raserafim

Raserafim

22/11/2005

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


GOSTEI 0
Siam

Siam

22/11/2005

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].Clube1 then 
    begin
      ...
      Break;
    end
    else
    if Self = Confrontos[i].Clube2 then 
    begin
      ...
      Break;
    end
  end;
end;
Assim quando ocorrer o Break, o [b:e154df7078]i[/b:e154df7078] será o índice.


GOSTEI 0
Raserafim

Raserafim

22/11/2005

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


GOSTEI 0
POSTAR