Newsgroup: it.comp.lang.delphi
Titolo: TFrame a runtime.

Ciao a tutti.
E' da una settimana che faccio prove su prove, ma non riesco a trovare
soluzione al problema.
Riducendo l'applicazione all'osso, voglio che ogni volta che prema un
pulsante, venga creato un certo Tframe e che alla chiusura del programma,
tutti iTframe creati vengano correttamente rilasciati. Semplice, no?
Allora, ho creato il mio Tframe con 4 Tedit giusto per metterci qualcosa
Per la lista dei Tframe ho scelto un Tobjectlist
Var framelist:Tobjectlist;
che viene creato in fase di creazione della form:
procedure TForm1.FormCreate(Sender: TObject);
begin
 framelist:=Tobjectlist.create;
end;
Quando premo un pulsante, istanzio un certo frame e lo aggiungo alla lista:
procedure TForm1.Button1Click(Sender: TObject);
var frame:Tframe;
begin
 frame:=nil;
 frame:=Tframe2.create(nil);
 frame.parent:=scrollbox1;
 frame.visible:=true;
 frame.name:='frame'+inttostr(random(10000));
 frame.BringToFront;
 framelist.Add(frame);
end;
quando la form viene chiusa (o distrutta... da sempre errore), faccio
rilasciare tutti i frame della listae la lista stessa:
var c:integer;
begin
 if framelist<>nil then
  begin
   for c:=0 to framelist.count-1 do
    begin
     if framelist[c]<>nil then framelist[c].free;
    end;
  end;
 framelist.free;
end;
Inesorabilmente mi viene sollevata una eccezione all'indirizzo 00000000. Uso
delphi 5 con tutte le patch.
Dove sto sbagliando???? sono 4 righe di codice incavallate!!!!
mi sapete dire dove sbaglio???
grazie
Matteo

Prova cosi e vedi cosa succede:
...
i := FrameList.Add(TFrame2.Create(nil));
With TFrame2(FrameList[i]) do
begin
  parent:=scrollbox1;
  visible:=true;
  name:='frame'+inttostr(random(10000));
  BringToFront;
end;
Se devi accedervi, fai sempre un cast come quello del with.
In genere uso questa tecnica quando uso la prop objects della tstringlist.
Una cosa che mi da da pensare è che usi NIL come owner:
TObjectList maintains a list of (owned) objects.
-------------------------------^^^^^^------------
Bye
A.

 Dove sto sbagliando???? sono 4 righe di codice incavallate!!!!
Prova ad impostare framelist.OwnsObjects := false;
Ciao
--
- Carlo -
cbertu81(at)libero(dot)it

Ciao

Funziona!!! Porca cippa! dovevo settare framelist.OwnsObjects:=false;!
Una settimana di grattacapi per una proprietà vero/falso settata male...
vorrei piangere... ;))
Grazie 1000 (pari a 0.52 euro...)
Matteo

 Prova cosi e vedi cosa succede:
[...]
controlla l'orologio del tuo sistema. Questa č la tua seconda risposta che č
in anticipo rispetto alla domanda! :-)


 in anticipo rispetto alla domanda! :-)
Oramai sono talmente telepatico che prevedo le domande...!
Cosa volete di +?
ahahahahahahahahahaha!
Qui l'ora è assegnata dal domain controller.
in questo preciso momento porta 9:16
Siamo avanti di quanto?
A.

 Siamo avanti di quanto?
Non siete avanti, ma indietro.
Le tue risposte hanno orari precedenti a quelli delle domande. Controlla con
il tuo orologio (o con quello di un collega) rispetto a quello del domain
controller.
Ciao! :-)


 Siamo avanti di quanto?
Date: Tue, 2 Jul 2002 09:17:01 +0200
X-Received-Date: Tue, 02 Jul 2002 09:33:05 MET DST (
twister1.libero.it
)
Direi di una ventina di minuti, ma sembra che stia aumentando dal primo 
messaggio.
Attenzione, un domain controller con un'ora sbagliata, se il dominio è 
Windows 2000 (con Kerberos), e' una brutta falla nella sicurezza e puo' 
anche portare alla perdita di dati nei profili degli utenti per errori di 
sicronizzazione.
Consiglio vivamente la sincronizzazione (net time /setsntp:ipaddress) con 
un server ntp "sicuro" (ne trovi anche in internet).
Ciao!! :)
Davide DG.
-- 
All resistance is futile! Prepare to be disassembled !