Newsgroup: it.comp.lang.delphi
Titolo: [TList] Questa sconosciuta! :-)

Ciao, sto facendo una unit in cui si elabora un file di testo.
Vorrei renderla riutilizzabile , perciň ho definito un type che posso
riutilizzare.
Volevo sapere:
A)Se nell'ultima riga libero MyList, qundo richiamo la unit mi da' errore.
    Se invece non libero MyList, funziona. Ma cosi' la memoria non rimane
allocata?
B)ARecord non ca liberato con un dispose? Nell'esempio di delphi non c'e'
Grazie!
    miyomo
UnitDecodifica;
interface
uses classes;
    //---TYPE
  type
   TTurno = record
    Mese,Anno: String;
    RecAttivita:TList;
  end;
function Decodifica:TTurno;
implementation
function Decodifica:TTurno;
type
  PMyList = ^AList;
  AList = record
    A,B: String;
  end;
var
  MyList: TList;
  ARecord: PMyList;
begin
   MyList := TList.Create;
   New(ARecord);
   ARecord^.A := '01LU';
   ARecord^.B := 'Riposo';
   MyList.Add(ARecord);
   Result.Mese:='Gennaio';
   Result.Anno := '2004';
   Result.RecAttivita := MyList;
  //MyList.Free;  //<---Va liberata o no?
end;
********
UnitPrincipale
procedure TForm1.Button1Click(Sender: TObject);
type
  PMyList = ^AList;
  AList = record
    A,B: String;
  end;
var
  Turno  : TTurno;
  ARecord: PMyList;
  i:integer;
begin
  Turno   := Decodifica;
  ARecord:=nil;
  for i:=0 to Turno.RecAttivita.Count-1 do
  begin
   //Carica una Listview
   with ListView1.Items.Add do
   begin
   ARecord := Turno.RecAttivita.Items[i];
   Caption := ARecord^.A;
   SubItems.Add(ARecord^.B)
   end;
  end;
  Dispose(ARecord);
end;

  //MyList.Free;  //<---Va liberata o no?
A rigor di logica, non puoi liberarla in questo modo perche' l'area di memoria
occupata da essa viene assegnata a Result.
Secondo me devi reingegnerizzare il sorgente. Di piu' non sono capace di
dirti, anche perche' sono incasinato sulle mie fatturazioni da bolla (con
raggruppamento... GRRR!) e dvorei consegnare martedi' sera..... 
Ciao
-- 
Morde. 
(
mo...@despammed.com
)

 B)ARecord non ca liberato con un dispose?
Certo, quando non ne avrai piu' bisogno.
Data risposta alle domande, perche' non ti fai una bella TListaAttivita'
e non dai un nome sensato a AList, possibile che il tipo non ti serva al
di fuori della funzione in cui lo dichiari?
Saluti
Paolo Arosio
-- 
"La dimostrazione dell'esistenza di specie intelligenti nell'universo
 e' che non ci vengono a trovare"

xche complicarsi la vita???
Inoltre, se non metti sysutils nelle uses NON TI VIENE INSTALLATO IL 
GESTORE DELLE ECCEZIONI.
unit Unit2;
interface
uses classes, sysutils;
type
    TRigaTurno = class
    public
      constructor Create(const A,b: string);
      property a: string read FA;
      property b: string read Fb;
    end;
    TTurno = class
    private
      FList: TList;
     Fmese: string;
     FAnno: string;
     function GetecordAttivita(const AIdx: integer): TRigaTurno;
     procedure SetAnno(const Value: string);
     procedure Setmese(const Value: string);
    public
      constructor Create;
      destructor Destroy; override;
      property Mese: string read Fmese write Setmese;
      property Anno: string read FAnno write SetAnno;
      function AddItem(ARigaTurno: TRigaTurno): integer; overload;
      function AddItem(const a,b: string): integer; overload;
      property RigaTurno[const AIdx: integer]: TRigaTurno read GetRigaTurno;
   end;
implementation
{ TTurno }
function TTurno.AddItem(const a, b: string): integer;
begin
   Result := FList.Add(TRigaTurno.Create(A,b));
end;
function TTurno.AddItem(ARigaTurno: TRigaTurno): integer;
begin
   Result := FList.Add(ATRigaTurno);
end;
constructor TTurno.Create;
begin
   inherited Create;
   FList := TList.Create;
end;
destructor TTurno.Destroy;
var
   i: integer;
begin
   for i:= Pred(FList.count) downto 0 do
     TRigaTurno(FList.Items[i]).Free;
   inherited;
end;
function TTurno.GetRigaTurno(const AIdx: integer): TRigaTurno;
begin
   Result := TRigaTurno(FList.Items[i])
end;
procedure TTurno.SetAnno(const Value: string);
begin
   FAnno := Value;
end;
procedure TTurno.Setmese(const Value: string);
begin
   Fmese := Value;
end;
{ TRigaTurno }
constructor TRigaTurno.Create(const A, b: string);
begin
   inherited Create;
   Fa := A;
   Fb := b;
end;
end.

 raggruppamento... GRRR!)
eheheh anche io ho lavorato su una procedura di fatturazione riepilogativa
con raggruppamento degli articoli in questi due giorni, con le quantita' dei
prodotti in float e calcolo di imponibile, iva e ripartizione dei totali per
aliquota.. due OO cosi'! :D
Ciao, Sandro

due OO cosi'! :D
Mi capisci.... ;)
-- 
Morde. 
(
mo...@despammed.com
)

 Mi capisci.... ;)
ci possiamo addobbare a costo zero l'albero di natale ;)
Ciao, Sandro
ps. ci facciamo regalare per natale dei pantaloni a cavallo basso, che dici?
;)

Anche io ho appena finito un programma per gestire un inventario. In fondo 
mi riepiloga il totale suddiviso per le tre aliquote IVA ma questa è stata 
la cosa più semplice; il difficile è stato riuscire a suddividere e 
calcolare i dati tra prodotti a peso variabile e prodotti a pezzo, non 
entro nel dettaglio ma se vi interessa ditemelo.
Ciao.
Inviato da 
www.mynewsgate.net

     private
[CUT]
Cioe' usare nella unit principale del programma
qualcosa del tipo
TUrno: TTUrno
ed usare tutte le proprieta' che hai definito tu come un
normale componente?
Scusami AS, ma sono un po' de coccio!
Miyomo