program project1;
{$mode delphi}{$H+}
{$DEFINE USE_ADVANCED_RECORD_SYNTAX}
uses Classes;
type
{ TCliente }
TCliente = record
public
type
TIndirizzo = record
Indirizzo: string[40];
CAP: string[5];
Citta: string[40];
Prov: string[2];
end;
TTipoIndirizzo = (tiSedeOp, tiSedeLeg, tiSedeCon);
var
ID: integer;
RagSociale: string[40];
ParIva: string[13];
SedeOperativa: TIndirizzo;
SedeLegale: TIndirizzo;
SedeConsegna: TIndirizzo;
{$IFDEF USE_ADVANCED_RECORD_SYNTAX}
procedure WriteIndirizzo(tipo: TTipoIndirizzo = tiSedeOp);
{$ENDIF}
end;
var Cliente: TCliente;
{ TCliente }
{$IFDEF USE_ADVANCED_RECORD_SYNTAX}
procedure TCliente.WriteIndirizzo(tipo: TTipoIndirizzo);
begin
WriteLn(RagSociale);
// test output
case tipo of
tiSedeLeg: if (SedeLegale.Indirizzo = '') and
(SedeLegale.CAP = '') and
(SedeLegale.Citta = '') and
(SedeLegale.Prov = '') then
tipo := tiSedeOp;
tiSedeCon: if (SedeConsegna.Indirizzo = '') and
(SedeConsegna.CAP = '') and
(SedeConsegna.Citta = '') and
(SedeConsegna.Prov = '') then
tipo := tiSedeOp;
end;
// output
case tipo of
tiSedeOp: begin
Writeln(SedeOperativa.Indirizzo);
Writeln(SedeOperativa.CAP, ' - ' , SedeOperativa.Citta, ' (', SedeOperativa.Prov, ')');
end;
tiSedeLeg: begin
Writeln(SedeLegale.Indirizzo);
Writeln(SedeLegale.CAP, ' - ', SedeLegale.Citta, ' (', SedeLegale.Prov, ')');
end;
tiSedeCon:begin
Writeln(SedeConsegna.Indirizzo);
Writeln(SedeConsegna.CAP, ' - ', SedeConsegna.Citta, ' (', SedeConsegna.Prov, ')');
end;
end;
end;
{$ENDIF}
begin
WriteLn('Test Advanced Record Syntax');
Write('Advanced Record Syntax: ');
{$IFDEF USE_ADVANCED_RECORD_SYNTAX}
WriteLn('ON');
{$ELSE}
WriteLn('OFF');
{$ENDIF}
WriteLn('Size TCliente: ', SizeOf(Cliente));
with Cliente do begin
ID:= 1;
RagSociale:='Lazarus Enterprises Inc.';
ParIva := 'IT01234567890';
With SedeOperativa do begin
Indirizzo := 'Via dei mille nr. 999';
CAP := '12345';
Citta := 'Firenze';
Prov := 'FI';
end;
With SedeConsegna do begin
Indirizzo := 'Via dei bancali nr. 541';
CAP := '55442';
Citta := 'Ancona';
Prov := 'AN';
end;
end;
{$IFDEF USE_ADVANCED_RECORD_SYNTAX}
Cliente.WriteIndirizzo(tiSedeLeg);
{$ELSE}
WriteLn(Cliente.RagSociale);
Writeln(Cliente.SedeLegale.Indirizzo);
Writeln(Cliente.SedeLegale.CAP, ' - ', Cliente.SedeLegale.Citta, ' (', Cliente.SedeLegale.Prov, ')');
{$ENDIF}
end.