Pessoal, boa tarde.
Gostaria de continuar o assunto de orientação a objetos em Delphi.. então, dando sequência a esse assunto criei a seguinte situação
Empresa -> Possui MUITOS Produtos -> Possui MUITAS Imagens.
Resumindo, uma empresa possui vários produtos e cada produto pode ter várias imagens. Para isso criei as seguintes classes:
TEmpresas, TProdutos, TProdutoImagem.
O type “TEmpresas” possui um atributo chamado FProdutos (que é um array de TProdutos), a classe TProdutos possui um atributo chamado FImagem (que é um array de TProdutoImagem).
Estou utilizando arrays para esse exemplo, embora exista a possibilidade de utilizar outros métodos (como listas, por exemplo).
Depois de uma breve explicação, crie um TButton no seu form e no evento onclick dele faça igual no exemplo, realize um debug usando o DEBUG INSPECTOR no objeto oEmpresa.
Obs: Essa classe pode (e deve) ser melhorada, mas apenas para exemplificar criei os objetos dessa forma:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, InvokeRegistry, Rio, SOAPHTTPClient; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; TProdutoImagem = class FCodigo: string; FCaminho: String; end; TArrayProdutosImagem = array of TProdutoImagem; TProdutos = class Private FNome : String; FDescricao : String; FImagem : TArrayProdutosImagem; Protected procedure setNome(const Value: String); procedure setDescricao(const Value: String); procedure setImagem (const Value: TArrayProdutosImagem); function getImagem (Index: Integer): TArrayProdutosImagem; Public Property Nome: String READ FNome Write SetNome; Property Descricao: String READ FDescricao Write setDescricao; Property Imagem: TArrayProdutosImagem READ FImagem WRITE FImagem; end; TArrayProdutos = array of TProdutos; TEmpresas = class Private FNome : String; FLeft : Integer; FTop : Integer; FProdutos : TArrayProdutos; Protected procedure setNome(const Value: String); procedure setLeft(const Value: Integer); procedure setTop (const Value: Integer); //procedure setProdutos (const Value : TProdutos); Public Property Nome: String READ FNome Write SetNome; Property Left: Integer READ FLeft Write SetLeft; Property Top: Integer READ FTop Write SetTop; Property Produtos: TArrayProdutos READ FProdutos WRITE FProdutos; end; var Form1: TForm1; implementation {$R *.dfm} { TProdutos } function TProdutos.getImagem(Index: Integer): TArrayProdutosImagem; begin result := FImagem; end; procedure TProdutos.setDescricao(const Value: String); begin FDescricao := Value; end; procedure TProdutos.setImagem(const Value: TArrayProdutosImagem); var vIndex : integer; begin SetLength(FImagem,Length(Value)+1); for vIndex := 0 to Length(Value) - 1 do begin FImagem[vIndex].FCodigo := Value[vIndex].FCodigo; FImagem[vIndex].FCaminho := Value[vIndex].FCaminho; end; end; procedure TProdutos.setNome(const Value: String); begin FNome := Value; end; { TEmpresas } procedure TEmpresas.setLeft(const Value: Integer); begin FLeft := Value; end; procedure TEmpresas.setNome(const Value: String); begin FNome := Value; end; procedure TEmpresas.setTop(const Value: Integer); begin FTop := Value; end; procedure TForm1.Button1Click(Sender: TObject); var oProdutoNotebook, oProdutoBicicleta : TProdutos; oImagemNotebook1, oImagemNotebook2, oImagemBicicleta1, oImagemBicicleta2: TProdutoImagem; oArrayProdutoImagem : TArrayProdutosImagem; oArrayProdutos : TArrayProdutos; oEmpresas : TEmpresas; begin oProdutoNotebook := TProdutos.Create; oProdutoBicicleta := TProdutos.Create; {CRIA O PRODUTO NOTEBOOK E INSERE DUAS IMAGENS PARA ELE} SetLength(oArrayProdutoImagem,2); oImagemNotebook1 := TProdutoImagem.Create; oImagemNotebook1.FCodigo := 'Cod1'; oImagemNotebook1.FCaminho := '/imagem/SonyVaio_1.jpg'; oImagemNotebook2 := TProdutoImagem.Create; oImagemNotebook2.FCodigo := 'Cod2'; oImagemNotebook2.FCaminho := '/imagem/SonyVaio_2.jpg'; oArrayProdutoImagem[0] := oImagemNotebook1; oArrayProdutoImagem[1] := oImagemNotebook2; oProdutoNotebook.FNome := 'Notebook'; oProdutoNotebook.FDescricao := 'Sony Vaio'; oProdutoNotebook.FImagem := oArrayProdutoImagem; {CRIA O PRODUTO BICICLETA E INSERE DUAS IMAGENS PARA ELE} oImagemBicicleta1 := TProdutoImagem.Create; oImagemBicicleta1.FCodigo := 'Cod1'; oImagemBicicleta1.FCaminho := '/imagem/Bicicleta_1.jpg'; oImagemBicicleta2 := TProdutoImagem.Create; oImagemBicicleta2.FCodigo := 'Cod2'; oImagemBicicleta2.FCaminho := '/imagem/Bicicleta_2.jpg'; oArrayProdutoImagem := nil; SetLength(oArrayProdutoImagem,2); oArrayProdutoImagem[0] := oImagemBicicleta1; oArrayProdutoImagem[1] := oImagemBicicleta2; oProdutoBicicleta.FNome := 'Bicicleta Caloi'; oProdutoBicicleta.FDescricao := 'Caloi 18 Marchas'; oProdutoBicicleta.FImagem := oArrayProdutoImagem; {Adiciona os dois produtos ao array de produtos da empresa} SetLength(oArrayProdutos,2); oArrayProdutos[0] := oProdutoNotebook; oArrayProdutos[1] := oProdutoBicicleta; oEmpresas := TEmpresas.Create; oEmpresas.Nome := 'Empresa Bruno Teste'; oEmpresas.Left := 10; oEmpresas.Top := 90; oEmpresas.Produtos := oArrayProdutos; oEmpresas.Nome := 'Teste'; end; end.
Confira meu perfil profissional no LinkedIn e faça parte da minha rede. https://lnkd.in/w9kyFR
Abs,
Bruno Fernando Antognolli.
Olá!
Bruno! mto grato pelo seu Post sobre a Classe, agora como eu faço pra pegar os dados dentro dessa Classe onde tem o ArrayProdutos ou melhor oEmpresas.Produtos.