Newsgroup: it.comp.lang.delphi
Titolo: Valori di ritorno

Da una finestra molte volte apro una seconda finestra in cui immetto dei 
valori, delle scelte ecc....
Non comprendo come far ritornare questi valori alla form chiamante.
In altre parole quando chiudo questa seconda finestra come faccio a rendere 
*persistenti* questi valori
in modo da poterli usare????
 

 in modo da poterli usare????
La soluzione è molto semplice: quando crei il form, sicuramente ne 
memorizzi il riferimento in una variabile
   MyFormVar := TMyForm.Create(nil);
in modo da poter richiamare il metodo /ShowModal/ per poter visualizzare 
la finestra di dialogo e attendere la sua chiusura prima di proseguire.
La finestra di dialogo può essere chiusa impostando in modo adeguato la 
proprietà /ModalResult/ al valore che si intende restituire alla form 
chiamante, che esprime sostanzialmente il "parere" dell'utente su quanto 
fatto all'interno della finestra stessa (ad esempio, il valore /mrOk/ 
esprime una conferma, /mrCancel/ un annullamento e così via).
Il valore attribuito alla proprietà /ModalResult/ viene restituito al 
ritorno dal metodo /ShowModal/, indicando alla form chiamante la scelta 
operata dall'utente.
Chiudere una form non significa necessariamente "distruggerla": hai 
ancora il riferimento alla finestra di dialogo e puoi sfruttarlo per 
accedere a campi, proprietà, componenti e controlli visuali contenuti al 
suo interno; ad esempio, puoi estrarre il valore inserito nella casella 
di testo "DummyEdit" in questo modo:
   DummyValue := MyFormVar.DummyEdit.Text;
In alternativa, puoi lavorare con le informazioni introdotte dall'utente 
all'interno del codice relativo alla classe di appartenenza della 
finestra di dialogo stessa, cioè nei metodi che intercettano gli eventi 
OnClick sui pulsanti di cui è dotata.
Volendo è possibile realizzare una finestra di dialogo di base con le 
scelte di conferma e annullamento senza scrivere nemmeno una riga di 
codice, posizionando i relativi pulsanti per le suddette operazioni 
(TButton, TBitBtn, ecc. a tua scelta) e impostando la loro proprietà 
/ModalResult/ al valore che intendi restituire attraverso la chiamata al 
metodo /ShowModal/ quando l'utente fa clic su uno dei pulsanti.
Un esempio tanto per riassumere. Ho creato un progetto contenente due 
form, una principale e una modale che chiede il nome all'utente da 
visualizzare in una casella di messaggio.
Nel form secondaria ho introdotto una casella di testo (TEdit) per 
l'inserimento del nome e due pulsanti, uno di conferma e uno di 
annullamento, impostando la proprietà /ModalResult/ degli stessi 
rispettivamente a /mrOk/ e /mrCancel/.
Nel form principale ho inserito un pulsante per chiedere il nome 
dell'utente e visualizzarlo, intercettando l'evento OnClick:
   procedure TMainForm.AskNameButtonClick(Sender: TObject);
   var
     DialogForm: TDialogForm;
   begin
     DialogForm := TDialogForm.Create(nil);
     try
       if DialogForm.ShowModal = mrOk then
         ShowMessage(DialogForm.YourNameEdit.Text);
     finally
       DialogForm.Free;
     end;
   end;
Semplice, no? ;-)
-- 
Marco «Alka» Breveglieri
  ABLS Team S.n.c. - Software & Web
  Via De Gasperi, 14
  42019 Scandiano (Reggio Emilia)
 
http://www.abls.it