Newsgroup: it.comp.lang.delphi
Titolo: Problema su chiusura Form

Ho un progetto che si compone di  una form MDIForm e varie form child,
il problema che si pone e' il seguente e mi si pone solo con una delle
40 form che appartengono al progetto.
Il problema e' questo, quando vado a chiudere la Form n°33 ottengo un
errore del tipo:
Project xxxx.exe reised exception class EAccessViolation with message
'Access violation at address .........in module 'BDERTL60.BPL'. Read
of address ......... Processed stopped
La cosa curiosa e' che succede solo con questa Form e solo se la apro
per prima, ovvero se apro e poi chiudo un altra form prima della 33 va
tutto bene.
Il codice è semplicemente un
Action = caFree 
sull'evento on close della form
e un Form33 = NULL
sull'evento on destroy
Tra l'altro e' lo stesso codice implementato anche sulle altre form.
Qualcuno ha qualche idea su questo rompicapo che porto avanti da ieri?
Grazie Enrico

 sull'evento on destroy
Non so dirti se questa cosa sia formalmente corretta, però io non l'ho mai
usata... prova a toglierla.
--
Jax
====
Un idealista è uno che, notando che una rosa odora meglio d'un cavolo,
ne conclude che se ne possa cavare una minestra migliore. (Henry
Mencken)

> sull'evento on destroy
In realta' ho Form33='\0', si tratta di codice C++ Builder ma la cosa
penso varrebbe lo stesso per delphi,e comunque non penso che sia li il
problema, anche perche' dovrei avere lo stesso errore sulle altre 39
form invece no.
Non so proprio che fare.

 In realta' ho Form33='\0', si tratta di codice C++ Builder ma la cosa
Visto che non ti costa molto, prova a commentare quella riga, al massimo non
funziona...
--
Jax
====
C'è chi legge e non capisce niente e chi non legge e capisce tutto.

quando chiudo una form mdi metto
action := cafree;
NOMEFORM := nil;
con il D5 la prima era nell'evento onclose mentre la seconda nel ondestroy.
con D7 ha cominciato a rompere le storie ed ho dovuto portare tutto
nell'onclose.
onestamente ho visto che funzionava e visto che avevo molta fretta non mi
sono fatto molte domande.
zigzag



Nulla da fare neanche con l'evento on close, funziona solo se tolgo
Action=caFree ma ovviamente la form non mi viene distrutta ma solo
ridotta ad icona
Enrico

 
In che ordine crei i form ? E' forse l'ultimo o il primo questo form ?
Massimo

 e un Form33 = NULL
sinceramente non mi sembra correttissimo impostare a null il puntatore di un
oggetto all'interno dell'oggetto stesso. Anche se sei nell'evento di
distruzione, comunque l'oggetto è ancora in memoria. E comunque
Action = caFree
serve proprio a quello, quindi, ammesso che funzioni (ed immagino di sì se
lo usi regolarmente) già il form dovrebbe scaricarsi dalla memoria.
Ciao,
Gianluca.

 lo usi regolarmente) già il form dovrebbe scaricarsi dalla memoria.
E' vero con Action=caFree la zona di memoria viene rilasciata però il puntatore alla Form, ovvero Form33 nel'esempio contiene ancora il valore della zona di memoria in c'era la Form, che mi consigli di fare allora, di portare a Null tutti i puntatori alle form con valore diverso Null all'interno di qualche evento della FormMDI?
Ciao Enrico
 
-- 
-------------------------
Enrico Pirozzi
Web: 
www.linuxtime.it/index.php
E-Mail: 
sco...@linuxtime.it
Fax: 02700403736
---------------------------------------------------------
La teoria è quando si sa tutto e niente funziona.
La pratica è quando tutto funziona e nessuno sa il perchè!
In questo caso abbiamo messo insieme la teoria e la pratica: 
non c'è niente che funziona e nessuno sa il perchè!
Albert Einstein

"Enrico" ha scritto nel messaggio
[...]
Hai necessità di testare che il puntatore del form Child sia a Null?
Diversamente una volta che il form è stato distrutto, non è interessante
sapere cosa contiene il puntatore.
L'unica necessità che vedo è quella di testare se il form è già aperto per
evitare di aprirlo ancora.
Invece di controllare se il puntatore della variabile è Null o valorizzato,
io terrei un oggetto globale dotato di una proprietà booleana che imposti a
True nel caricamento del form ed a False in chiusura (naturalmente una
proprietà specifica per ogni form che ti interessa controllare).
Ciao,
Gianluca.

Salve, hai poi risolto?
Questa cosa capita anche a me, (solo da quando sono passato a D7), ma
cosa ancora più strana e che non avviene sempre, o meglio la stessa
form che mi da errore non lo fa sempre, io pensavo fosse legato al
fatto che "distrugga" la form quando magari non ha fatto in tempo a
"distruggere" qualcos'altro legato alla stessa, come una Query...o
sbaglio?
Cmq, io non ho risolto. Per ora ho eliminato i miei Action:=caFree :(
DA