Newsgroup: it.comp.lang.delphi
Titolo: Liberare risorse dalla main form

Sto' sperimentando questa idea, probabilmente balorda, se lo è ditemelo 
pure che torno a utilizzare idee più sicure :-)
Il mio exe apre la main form (senza passare per uno splash), la main 
form contiene un'immagine 500 x 300, qualche pulsante e un pannello 
invisibile/visible per le impostazioni avanzate ecc.
Tramite un pulsante apro un'altra form, non modale (che è quella in cui 
l'utente lavorerà effettivamente). Il tale form vengono poi caricati 
vari frame a runtime (ho visto vari esempi tra cui quello di Marco 
Breveglieri). 
Ho pensato che sarebbe preferibile (se si può) liberare la memoria della 
main form mentre si lavora sui frame, ovviamente non posso chiudere la 
main form e semplicemente nasconderla non libera le risorse...
ho perciò provato così:
fMain := nil;
fMain.free;
fMain.visible := false
la cosa sembra funzionare, ma quando chiudo la form con i frame non 
riesco più visualizzare la main form senza errori... vi chiedo se, e 
come è possibile liberare risorse dalla main form senza tenerla 
solamente nascosta.
In sostanza le due righe:
fMain := nil;
fMain.free;
che dovrebbero liberare la memoria non mi permettono poi di riavere 
accesso alla main form.
Grazie
Paolo
--- posted by geoForum on 
http://www.delphiedintorni.it


Ciao Paolo,
  chiaramente con il metodo che utilizzi mi pare tu vada a deallocare
la main form, con annessi e connessi.
Se ad occupare risorse è l'immagine allora basta deallocarla,
altrimenti demanda il controllo di tutta la tua applicazione ad una
nuova form che occupa meno risorse.
Spero di aver capito il tuo problema!
Ciao
Seek

 form contiene un'immagine 500 x 300
Il tuo problema non è molto chiaro. Se hai un MainForm, suppongo che tu 
ce l'abbia per farne uso, quindi non mi sembra una buona idea 
distruggerlo: che senso ha un'applicazione Windows visuale senza un Form 
visibile, casualmente quello principale? :-)
Ciò che occupa risorse è indicativamente l'immagine (di cui non conosco 
le caratteristiche), per cui devi fare a meno di quella, o utilizzare la 
versione in formato JPEG.
Ciao,
   Marco.
-- 
MARCO BREVEGLIERI
  (
http://www.marco.breveglieri.name
)

distruggerlo
beh, diciamo che quello che intendevo provare a fare č di usare la 
stessa main form sia all'inizio sia alla fine prima della chiusura... 
liberandone le risorse nel mezzo quando non serve... da quel che mi 
suggerite non pare possibile... quindi ritengo che mi conviene 
riorganizzare la mia app.
Grazie a entrambi.
Paolo.


 stessa main form sia all'inizio sia alla fine prima della chiusura... 
...e in mezzo cosa succede? :-)


 fMain.visible := false
[...]
Scusate, ma se le istruzioni sono scritte "in questa sequenza" come fa a non 
dar errore ?
Se fMain = nil, poi come è possibile poi richiamare metodi e proprietà ?
Grazie
Andrea 

...e in mezzo cosa succede? :-)
eh eh, in mezzo viene mantenuta aperta la form che carica i frame in cui 
l'utente utilizza il database del gestionale.
In sostanza la mia idea č quella di avere una sola form (quella con 
l'immagine) che mi faccia sia da splash sia da about ecc. in cui siano 
inseriti sia tutti i controlli per la connessione al DB sia i vari 
settings del DBA ecc. Oltre a questa form, diciamo cosě di servizio e di 
estetica, uso poi un'altra form (quella con i frame) per lavorare con il 
db. Ho pensato che quando avviene la connessione al db, e quindi 
all'avvio della form con i frame, sia inutile tenere allocate le risorse 
usate per la form con l'immagine.
Comunque dopo i vostri consigli e quesiti ho fatto cosě:
1. ho assegnato la main form alla form con i frame anziché a quella con 
l'immagine;
2. ho nascosto la main form all'avvio con:
Application.ShowMainForm := False; 
mostrando al suo posto la form con l'immagine
A questo punto l'utente prova la connessione e se viene stabilita 
si apre la main form con un semplice fMain.Show e si chiude quella con 
l'immagine con:
Action := caFree;
fImmagine := nil;
Il tutto, per ora, appare molto veloce.
Grazie ancora.
Paolo


 a non dar errore ?
Infatti mi pare di aver constatato che le istruzioni:
fMain := nil;
fMain.free;
non possano essere usate con fMain metre vanno benissimo per le form 
secondarie. Beh ci ho provato, non mi ero ancora imbattuto su un caso 
simile durante le mie letture su Delphi.
Ciao e grazie.


 l'utente utilizza il database del gestionale.
*Quella* deve essere il tuo "MainForm". Tutto qua. :-)
