Newsgroup: it.comp.lang.delphi
Titolo: Rilascio Oggetto

Ciao a tutti,
ho una situazione un pò strana.
Da una form MDIChild dopo aver selezionato una riga (record) da una
DBGrid
presente sulla suddetta form, al click di un bottone apro una nuova
form sempre MDIChild
con dei dati di dettaglio inerenti al record selezionato sulla griglia.
var
   myForm : TFormDett;
begin
    myForm := TFormDett.create(Self);
    ....
    ....
    ....
   myForm.Show;
   ....
   ....
end;
Se seleziono un altro record della DBGrid presente sulla form
principale
in automatico mi si aggiorna la form di dettaglio se aperta.
Ma il problema sta nel fatto che se chiudo la form di dettaglio la
variabile
myForm continua a risultare ASSEGNED(myForm) = true...
Qualche suggerimento?
Grazie Rino

 ha scritto nel messaggio
news:1143727523.8...@g10g2000cwb.googlegroups.com...


dimenticavo di dire che myForm non è dichiarato
all'interno dell'evento click...
ma è una variabile a livello di classe (la prima form mdichild)...

 ha scritto nel messaggio
news:1143729703.2...@j33g2000cwa.googlegroups.com...
dimenticavo di dire che myForm non č dichiarato
all'interno dell'evento click...
ma č una variabile a livello di classe (la prima form mdichild)...

un attimo...
ma myForm è una variabile pubblica della form chiamante, non di quella
chiamata...

 ha scritto nel messaggio
news:1143730953.8...@u72g2000cwu.googlegroups.com...
un attimo...
ma myForm č una variabile pubblica della form chiamante, non di quella
chiamata...

ma su questo non avevo alcun dubbio...
il problema è che quando sposto la selezione su un altro
record, vado a verificare se la variabile myForm è assegnata
poichè in tal caso devo aggiornare i dati presenti sulla form
(FormDett)...
Ma se la form (FormDett) la chiudo, la variabile myForm resta assegnata
ed io non riesco a capire se è solo assegnata ma in realtà la form
non esiste più, o se è assegnata ed esiste....
all' evento afterscroll del clientdataset della form chiamante faccio :
 if assigned(myForm) then
   begin
      //aggiornamento dati sulla form FormDett
   end
  else
     begin
         //creazione della form con passaggio dei nuovi parametri
     end:
Ora se chiudo la FormDett (Metodo Close  Action := caFree) la variabile
myForm resta assigned e quindi io mi aspetto di potergli passare i
nuovi parametri
ma logicamente mi va in errore poichè non esiste più.
Spero di essere stato più chiaro questa volta...
Rino


Provo a riassumere la tua esigenza:
- hai un bottone sulla form principale che apre una form con un
dettaglio di informazioni.
- se premi il bottone una seconda volta deve essere visualizzata di
nuovo la form di dettaglio con le info aggiornate e non un altra
finestra di dettaglio.
Partendo dal presupposto che ho capito quello che chiedi, io farei
così:
-definisci la variabile "myForm : TFormDett;"  all'interno della form
chiamante (non all'interno della proc. click del bottone)
- alla creazione della form chiamante ti preoccupi di mettere a nil
"myForm"
- alla pressione del bottone di dettaglio controlli con assign(myForm)
se la form dettaglio esiste, la crei se serve
- quando l'utente chiude la "myForm" ti limiti a chiuderla (senza fare
"Action=caFree")
- se si preme una seconda volta il bottone di dettaglio non crei una
seconda volta "myForm" (se esite) ma ti limiti ad aggiornare le info.
- per finire nella distruzione della form principale ti preoccupi di
chiudere e distruggere la form di dettaglio.
In poche parole la vita della form dettaglio dopo la prima creazione
segue quella della form principale.
Ciao
Maurizio

myForm continua a risultare ASSEGNED(myForm) = true...
Ovvio.
Dov'è il problema ?

  Myform:= nil;
Questa tecnica è sbagliata e si è discusso spesso del perché lo è.
Imparate a non consigliarla.

non esiste più, o se è assegnata ed esiste....
La form esiste ancora.  Devi istanziare le form in modo dinamico:
with TFormDett.Create(Self) do
  try
    ShowModal;
  finally
    Free;
  end;
oppure se vuoi usare Action := caFree sull'OnClose, non usare
ShowModal, ma Show e non liberare esplicitamente:
TFormDett.Create(Self).Show;


Ancora????
Basta per favore con sta storia nel nil nel metodo close :(
-- 
Ore 18.30: premo invio.

Ciao Andrea,
felice di sentirti...
Cmq, il problema è che quando poi seleziono un nuovo record sulla
dbgrid io farei
all'evento afterscroll del cds :
if assigned(myForm) then
  RefreshRecordOnFormDett
else
   CreazioneFormDett
essendo myForm sempre assegnata non riuscirò a ricrearla se l'ho
chiusa....
      Action := caFree;
Ciao Rino

 ha scritto nel messaggio
news:1143727523.8...@g10g2000cwb.googlegroups.com...
