Fórum TList #368815
05/03/2009
0
Assim
eu tenho uma classe chamada itens e uma classe chamada venda,
eu instancio um objeto venda e preciso vender os itens, porém náo tem como saber quantos itens vai ser vendido então não possu usar um array dinamico do tipo item, já podendo criar um lista do tipo item, eu poderia ir adicioando objeto item conforme necessário e remover tb.
num sei se expliquei direito.
Mas se alguem tiver uma idéia ficaria muito grato
Erick.rocha
Curtir tópico
+ 0Posts
05/03/2009
Rodc
O único problema é que ela só guarda ponteiro para TComponent. Ou seja, você tem que ficar fazendo TypeCast para usar as informações utilizadas. Dá uma olhada no help da classe TList e vê se te serve.
Gostei + 0
05/03/2009
Marco Salles
Vc tem que definir os outros métodos
Type Titem = class end; Type TVenda = class private Flista:TList; function GetItem(Index: integer): TItem; procedure SetItems(Index: integer; const Value: TItem); public property Items[Index:integer]:TItem read GetItem Write SetItems; constructor Create; DesTructor Destroy;override; end;
implementation
.........
{ TVenda }
constructor TVenda.Create;
begin
inherited Create;
FLista:=Tlist.Create;
end;
destructor TVenda.Destroy;
var
i:integer;
begin
for i:= count-1 downto 0
begin
TItem(Flista[i]).Free;
Flista[i]:=nil
end;
Flista.Free;
inherited;
end;
function TVenda.GetItem(Index: integer): TItem;
begin
if Index <= Flista.Count - 1 then
result:=TItem(Flista[Index])
else
result:=nil;
end;
procedure TVenda.SetItems(Index: integer; const Value: TItem);
begin
if Index <= Flista.Count - 1 then
Flista[Index]:=Value
end;Gostei + 0
06/03/2009
Erick.rocha
Mas eu não terei que instanciar o Objeto TItem em algum momento, ou não precisa, na classe venda devo declarar uma propriedade do tipo TItem
Gostei + 0
06/03/2009
Marco Salles
Precisa sim ... Na hora de Adicionar os Items , vc deve criar um Objeto
do Tipo TItem e adiona-lo ao TVenda
Var Venda:TVenda; //visibilidade fora do Método
var obj:TTitem; begin Obj:=TItem.Create; //faça as Atribuiçoes do Objeto TItem Venda.addObject(obj); //não destrua nada end;
Não precisa.. Tudo se faz usando Ponteiros
TItem(Venda[i]).Propriedade de TItem
Gostei + 0
06/03/2009
Marco Salles
Type Titem = class end;
Type TVenda = class private Flista:TList; function GetItem(Index: integer): TItem; procedure SetItems(Index: integer; const Value: TItem); public property Items[Index:integer]:TItem read GetItem Write SetItems; constructor Create; DesTructor Destroy;override; end;
Precisa sim ... Na hora de Adicionar os Items , vc deve criar um Objeto
do Tipo TItem e adiona-lo ao TVenda
Var Venda:TVenda; //visibilidade fora do Método
var obj:TTitem; begin Obj:=TItem.Create; //faça as Atribuiçoes do Objeto TItem Venda.Items.addObject(obj); //não destrua nada end;
Não precisa.. Tudo se faz usando Ponteiros
[b:b6be5cd882][u:b6be5cd882]Venda.Items[i] é um Objecto do Tipo TItems[/u:b6be5cd882][/b:b6be5cd882]
Mas Atenção
(Venda.Items[i] as TItem) por se usar Ponteiros não compila Devemos pois fazer um TypeCast TItem(Venda.Items[i]).PropriedadesDeTIem
Por não permitir EDITAR tive que reescreve a mensagem TODA :evil: :evil: :evil:
Gostei + 0
27/03/2009
Ibotirama
Type TVenda = class private Flista:TList; function GetItem(Index: integer): TItem; procedure SetItems(Index: integer; const Value: TItem); public property Items[Index:integer]:TItem read GetItem Write SetItems; constructor Create; DesTructor Destroy;override; end;
tentando fazer:
for i:=0 to Venda.Items.Count -1 do
dá erro, como fazer ???
Gostei + 0
27/03/2009
Marco Salles
é foi apenas uma pequena introdução ...Vc pode fazer assim :
Inclua uma Procedure Add ..[b:afa59b9e0a] Na classe TVenda[/b:afa59b9e0a]
Type
TVenda = class
private
Flista:TList;
ftotal:integer; //Total de Items...
function GetItem(Index: integer): TItem;
procedure SetItems(Index: integer; const Value: TItem);
procedure Add(item:TItem);
public
property Items[Index:integer]:TItem read GetItem Write SetItems;
property total:integer read getFtotal;
constructor Create;
DesTructor Destroy;override;
end;
...
procedure TVenda.Add(item: TItem); begin Flista.Add(item); fTotal:=Ftotal+1; end;
Alterer tb O constrtutor para Inicializar A FTotal ( Total de Items)
constructor TVenda.Create; begin inherited Create; FLista:=Tlist.Create; Ftotal:=0; end;
Agora é so fazer :
Var
Venda:TVenda; //visibilidade fora do Método
procedure TForm1.Button1Click(Sender: TObject); var obj:TItem; idx:integer; begin Obj:=TItem.Create; //faça as Atribuiçoes do Objeto TItem Venda.Add(obj); //Aqui vc Adiciona os Objetos..... //não destrua nada for idx:=0 to venda.total do //Aqui vc Percorre <varre > TItem(venda.Items[idx]).suaPropriedade;
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)