Fórum Composição de Classes no Delphi #475901
10/04/2014
0
Estou começando a programar em OO com o Delphi... Criei uma Classe mestre (NotaFiscal) com propriedades e métodos normalmente... Não estou conseguindo agora fazer os Itens desta nota Fiscal. Não sei como criar uma propriedade que tenha os meus itens (que é uma segunda classe)... Alguem poderia me dar um exemplo simples de como criar esta propriedade e como carregar ela com todos os itens da nota?
Emerson
Curtir tópico
+ 0Posts
10/04/2014
Cauê Nishijima
Pelo que entendi você tem duas Classes, uma TNotaFiscal e outra TItens(que contem os itens da nota fiscal) é isso?
na classe TNotaFiscal você precisa fazer um Uses pra classe TItens, depois precisa declarar a propriedade itens do tipo TItens:
property itens: TItens read FItens write FItens;
Em seguida no construtor da classe TNotaFiscal você deve instanciar um objeto TItens e atribuir para FItens, assim você pode acessar os itens da nota fiscal da seguinte forma:
nf = TNotaFiscal.Create(Self); edtDescricao.Text := nf.itens.descricao;
Gostei + 0
10/04/2014
Emerson
Veja a Classe de Nota:
unit uNotaFiscal;
interface
uses Classes, ADODB, Variants, System.SysUtils, Data.DB, uNotaFiscalItens,
Dialogs, Forms, StrUtils;
type
TNotaFiscal = class(TPersistent)
private
{ private declarations }
FEmpresa: Integer;
FNumero: Integer;
FSerie: Integer;
function getItens(index: Integer): TNotaFiscalItens;
protected
{ protected declarations }
public
{ public declarations }
procedure setItens(index: Integer; const value: TNotaFiscalItens);
property Empresa: Integer read FEmpresa write FEmpresa;
property Numero: Integer read FNumero write FNumero;
property Serie: Integer read FSerie write FSerie;
property Itens[index: Integer]: TNotaFiscalItens read getItens write setItens; default;
constructor Create;
end;
implementation
{ TNotaFiscal }
constructor TNotaFiscal.Create;
begin
inherited Create;
end;
function TNotaFiscal.getItens(index: Integer): TNotaFiscalItens;
begin
Result := Itens[Index];
end;
procedure TNotaFiscal.setItens(index: Integer; const value: TNotaFiscalItens);
begin
Itens[Index].Assign(Value);
end;
end.
e a Classe de Itens da nota:
unit uNotaFiscalItens;
interface
uses Classes, ADODB, Variants, System.SysUtils, System.StrUtils, Data.DB;
type
TNotaFiscalItens = class(TCollectionItem)
private
{ private declarations }
FItem: Integer;
FProduto: Integer;
FVlrUnitario: Double;
protected
{ protected declarations }
public
{ public declarations }
property Item: Integer read FItem write FItem;
property Produto: Integer read FProduto write FProduto;
property ValorUnitario: Double read FVlrUnitario write FVlrUnitario;
constructor Create;
end;
implementation
{ TNotaFiscalItens }
constructor TNotaFiscalItens.Create;
begin
inherited Create;
end;
end.
Gostei + 0
10/04/2014
Cauê Nishijima
uNotaFical.pas:
unit uNotaFiscal;
interface
uses Classes, ADODB, Variants, System.SysUtils, Data.DB, uNotaFiscalItens,
Dialogs, Forms, StrUtils;
type
TNotaFiscal = class(TPersistent)
private
{ private declarations }
FEmpresa: Integer;
FNumero: Integer;
FSerie: Integer;
FItens: TList;
function getItens(index: Integer): TNotaFiscalItens;
protected
{ protected declarations }
public
{ public declarations }
procedure setItens(index: Integer; const value: TNotaFiscalItens);
property Empresa: Integer read FEmpresa write FEmpresa;
property Numero: Integer read FNumero write FNumero;
property Serie: Integer read FSerie write FSerie;
property Itens[index: Integer]: TNotaFiscalItens read getItens
write setItens; default;
constructor Create;
end;
implementation
{ TNotaFiscal }
constructor TNotaFiscal.Create;
begin
inherited Create;
FItens := TList.Create;
end;
function TNotaFiscal.getItens(index: Integer): TNotaFiscalItens;
begin
result := FItens.Items[index];
end;
procedure TNotaFiscal.setItens(index: Integer; const value: TNotaFiscalItens);
begin
FItens.Insert(index,value);
end;
end.
uNotaFiscalItens:
unit uNotaFiscalItens;
interface
uses Classes, ADODB, Variants, System.SysUtils, System.StrUtils, Data.DB;
type
TNotaFiscalItens = class
private
{ private declarations }
FItem: Integer;
FProduto: Integer;
FVlrUnitario: Double;
protected
{ protected declarations }
public
{ public declarations }
property Item: Integer read FItem write FItem;
property Produto: Integer read FProduto write FProduto;
property ValorUnitario: Double read FVlrUnitario write FVlrUnitario;
end;
implementation
{ TNotaFiscalItens }
end.
fiz um teste colocando um button em um form e escrevendo o seguinte código no onClick do mesmo:
procedure TForm1.Button1Click(Sender: TObject); var item: TNotaFiscalItens; nf : TNotaFiscal; begin item := TNotaFiscalItens.Create; item.Item := 1; item.Produto := 1; item.ValorUnitario := 12.01; nf := TNotaFiscal.Create; nf.setItens(0,item); ShowMessage(FloatToStr(nf.Itens[0].ValorUnitario)); end;
Gostei + 0
10/04/2014
Emerson
Eu tava pensando em montar um Array de Itens.. e ir alimentando ele.. não tinha pensado em List... Valeu pela ajuda...
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)