Array Propert
Tenho a seguinte estrutura:
function getEndereco(index: integer): TclsEndereco_Pessoa;
procedure setEndereco(index: integer; const Value: TclsEndereco_Pessoa);
fArraycli_Endereco_Cliente:array of TclsEndereco_Pessoa;
property array_pes_endereco[index:integer]:TclsEndereco_Pessoa read getEndereco write setEndereco;
function TclsPessoa.getEndereco(index: integer): TclsEndereco_Pessoa;
begin
Result:= fArraycli_Endereco_Cliente[index];
end;
procedure TclsPessoa.setEndereco(index: integer;
const Value: TclsEndereco_Pessoa);
begin
fArraycli_Endereco_Cliente[index]:= value;
end;
-------------------------------------------------------------------------
Quando tento fazer assim em tempo de copilação esta dando erro :[DCC Error] clsCliente.pas(119): E2029 [ expected but ) found.
E o para no for.
{Incluir na tabela de Endereços}
for I := 0 to High(array_pes_endereco) do
array_pes_endereco[i].Mantem(pAcao);
function getEndereco(index: integer): TclsEndereco_Pessoa;
procedure setEndereco(index: integer; const Value: TclsEndereco_Pessoa);
fArraycli_Endereco_Cliente:array of TclsEndereco_Pessoa;
property array_pes_endereco[index:integer]:TclsEndereco_Pessoa read getEndereco write setEndereco;
function TclsPessoa.getEndereco(index: integer): TclsEndereco_Pessoa;
begin
Result:= fArraycli_Endereco_Cliente[index];
end;
procedure TclsPessoa.setEndereco(index: integer;
const Value: TclsEndereco_Pessoa);
begin
fArraycli_Endereco_Cliente[index]:= value;
end;
-------------------------------------------------------------------------
Quando tento fazer assim em tempo de copilação esta dando erro :[DCC Error] clsCliente.pas(119): E2029 [ expected but ) found.
E o para no for.
{Incluir na tabela de Endereços}
for I := 0 to High(array_pes_endereco) do
array_pes_endereco[i].Mantem(pAcao);
Osvaldo Junior
Curtidas 0
Respostas
Marco Salles
25/01/2012
qual o delphi que voce esta utilizando
Da suporte a generrics ???
Da suporte a generrics ???
GOSTEI 0
Emerson Nascimento
25/01/2012
como array_pes_endereco é uma propriedade e não um array, creio que seja necessário criar um método Count (assim como a contagem de linhas de um Memo ou de um StringList). dessa forma você poderá varrer os itens da sua propriedade com o uso do for.
function TclsPessoa.Count: integer;
begin
try
Result := Length(fArraycli_Endereco_Cliente);
except
Result := 0;
end;
end;
então você poderá usar assim:
for i := 0 to clsPessoa.Count-1 do
clsPessoa.array_pes_endereco[i].Mantem(pAcao);
function TclsPessoa.Count: integer;
begin
try
Result := Length(fArraycli_Endereco_Cliente);
except
Result := 0;
end;
end;
então você poderá usar assim:
for i := 0 to clsPessoa.Count-1 do
clsPessoa.array_pes_endereco[i].Mantem(pAcao);
GOSTEI 0
Osvaldo Junior
25/01/2012
Marco o delphi e o 2007.
GOSTEI 0
Osvaldo Junior
25/01/2012
Emerson, vou tentar da forma que voce falou.
GOSTEI 0
Marco Salles
25/01/2012
O delphi 2007 não tem generics... Então tente como o emerson falou que voce está em boas
mãos
mãos
GOSTEI 0
José Rubens
25/01/2012
Olá pessoal,
Não sei se foi omitido do código mas vou perguntar assim mesmo. Como estamos trabalhando com array dinâmico não temos que criar o elemento antes de atribuir um algo a ele?
Está em outra parte do código este redimensionamento do array?
Não sei se foi omitido do código mas vou perguntar assim mesmo. Como estamos trabalhando com array dinâmico não temos que criar o elemento antes de atribuir um algo a ele?
Está em outra parte do código este redimensionamento do array?
GOSTEI 0
Marco Salles
25/01/2012
Olá pessoal,
Não sei se foi omitido do código mas vou perguntar assim mesmo. Como estamos trabalhando com array dinâmico não temos que criar o elemento antes de atribuir um algo a ele?
Está em outra parte do código este redimensionamento do array?
Não sei se foi omitido do código mas vou perguntar assim mesmo. Como estamos trabalhando com array dinâmico não temos que criar o elemento antes de atribuir um algo a ele?
Está em outra parte do código este redimensionamento do array?
Bem Jose , eu não gostomuito desse Modelo , porque existem classes no Delphi que dão uma Orientação
Melhor e facilita o Trabalho neste sentido. Porém acredito que deva sim de alguma for alocar
Memória para o Array.. Uma das formas , talves não a melhor é esta
procedure Tteste.setEndereco(index: integer; const Value: TclsEndereco_Pessoa);
begin
if index > High(fArraycli_Endereco_Cliente) then
begin
index:= High(fArraycli_Endereco_Cliente)+1
SetLength(fArraycli_Endereco_Cliente,Length(fArraycli_Endereco_Cliente)+1);
end
else
begin
// destruição do Objeto para Alocação de Outro Objeto posteriomente
fArraycli_Endereco_Cliente[index].Free;
fArraycli_Endereco_Cliente[index]:=nil
end;
//Sobreposição ou Novo Objeto Atribuido ao Indice Index
fArraycli_Endereco_Cliente[index]:= value;
end;
GOSTEI 0
Osvaldo Junior
25/01/2012
Emerson da forma que voce falou ficou ok, obrigado.
Marcos que classe voce usaria?
Marcos que classe voce usaria?
GOSTEI 0
Emerson Nascimento
25/01/2012
Creio que ele esteja usando o mesmo esquema das listas padrão: Add.
GOSTEI 0
Marco Salles
25/01/2012
Emerson da forma que voce falou ficou ok, obrigado.
Marcos que classe voce usaria?
Marcos que classe voce usaria?
Então o delphi é muito Rico em recursos ... existem várias coleções que se pode usar
O delphi nas versões novas nen se fala .. mas segue ai um classe pouco utilizada]
mas muito interressante .. As classes TCollectionItem e TCollection
segue
TclsEndereco_Pessoa = class (TCollectionItem)
public
Rua:String;
end;
TclsPessoa = class (TCollection)
end;
var
endereco_Um,Endereco_Dois: TclsEndereco_Pessoa;
Pessoas:TclsPessoa;
i:integer;
begin
Pessoas:= TclsPessoa.Create(TclsEndereco_Pessoa);//************************ Hegemonia ******
try
endereco_Um:=TclsEndereco_Pessoa.Create(pessoas);
endereco_Um.Rua:=Rua_Um;
Endereco_Dois:=TclsEndereco_Pessoa.Create(Pessoas);
Endereco_Dois.Rua:=Rua_Dois;
for i := 0 to pred(Pessoas.Count) do
Showmessage(TclsEndereco_Pessoa(Pessoas.GetItem(i)).Rua);
finally
pessoas.Free;
end;
end;Uma grande vantagem desta abortagem é a A restrição imposta pela TCollectionItem de criar instancias da sua
coleção unicamente da classe que foi especificada em seu contructor
Isto garante a homogenidade da coleção
Por exemplo imagine uma classe
Teste = class (TCollectionItem)
public
Rua:String;
end;
[code]/
Como o Constructor de Pessoas esta definido para a classe TclsEndereco_Pessoa so Objetos
desta instancia podem fazer parte desta coleção .. Logo ao FAzer em RumTime
[code]
obtTeste:=TTeste.Create(pessoas); //***************ERRO*****
obtTeste.Rua:=teste;
[code]Obteremos um erro em rumtime que nos alertara para a inclusão de um Objeto
que não pertence a Lista
enfim espero que te sirva para alguma coisa
GOSTEI 0