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

22/11/2005

1

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)?


Responder

Posts

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

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

23/11/2005

Siam

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 ?


Responder

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

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


Responder

25/11/2005

Raserafim

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


Responder