Newsgroup: it.comp.lang.delphi
Titolo: Come identificare il form chiamante?

Salve a tutti,
vorrei sapere come posso fare a sapere quale form ha richiamato un
secondo form. Mi spego meglio:
data una serie di form (fmPrimo, fmSecondo...) in cui l'utente,
schiacciando un pulsante,  puo' far apparire un nuovo form modale
(fmInput) in cui deve inserire un valore, come faccio a passare il
valore indietro al form corretto? Cioe' come faccio a sapere quale dei
form originali ha richiamato il form modale?
ho provato ad usare Sender, ma  con poco successo:
codice di fmPrimo: TfmTest
[...]
procedure TfmTest.btBottone(Sender: TObject);
var
  fmInput: TForm;
begin
  fmInput:=TfmInput.Create(Self);
  fmInput.ShowModal;
  fmInput.Free; // per sicurezza
end;
[...]
codice di fmInput: TfmInput
[...]
var
  fmCaller: TfmTest;
procedure TfmInput.FormCreate(Sender: TObject);
begin
  fmCaller:=(Sender as TfmTest);
[...]
e qui si ferma in errore. Sender e' sempre vuoto ().
Suggerimenti?
- Mariano La Via.-

 e qui si ferma in errore. Sender e' sempre vuoto ().
ti sembrera' strano ma il Sender nel gestore TfmInput.FormCreate non
coincide con il Self di TfmInput.Create(self). Nel tuo caso, puoi sapere il
form chiamante semplicemente con (fmInput.Owner as TfmTest)...
risparmiandoti cosi' anche la variabile globale fmCaller.
HTHY, ciao.
Mimmo Laddomada
========================
c.lad...@agora.stm.it
ladd...@infomedia.it

Allora:
metti due pulsanti nel form di input, i classi ok e annulla.
Al pulsante ok metti come modalresult il valore mrOk.
Al pulsante annulla metti come modalresult il valore MRCancel
poi:
if FrmInput.ShowModal = mrOk then
    begin
    ValoreDigitato := FrmInput.Edit1.text
    end;
FrmInput.Release
Occhio! In questo modo non hai bisogno di chiudere frminput da se stesso e
non ti serve codice aggiuntivo da appioppare agli eventi onclick dei 2
pulsanti.
Per altri dettagli vediti la prop modalresult.
Saluti e buon lavoro.
"Se č Microsoft non funziona"

>
vorrei sapere come posso fare a sapere quale form ha richiamato un
secondo form. Mi spego meglio:
data una serie di form (fmPrimo, fmSecondo...) in cui l'utente,
schiacciando un pulsante,  puo' far apparire un nuovo form modale
(fmInput) in cui deve inserire un valore, come faccio a passare il
valore indietro al form corretto? Cioe' come faccio a sapere quale dei
form originali ha richiamato il form modale?
[...]
<<
Nella form figlia puoi mettere un campo pubblico di tipo TForm cui
assegnare self (se proprio serve):
TfmFiglia = class(TForm)
...
public
  myCreator: TForm;
end;
Nel creatore:
procedure TfmCreatore.btBottone(Sender: TObject);
var
  fmFiglia: TfmFiglia ;
begin
  fmFiglia:=TfmFiglia.Create(Self);
  try
    fmFiglia.myCreator := Self;
    fmFiglia.ShowModal;
  finally
    fmFiglia.Free; // per sicurezza
  end;
end;
Eventuale codice per l'uso di myCreator andrą in FormShow piuttosto che in
FormCreate:
if not Assigned(myCreator) then
    raise Exception.Create('Dov''č il mio creatore?');
hth
Paolo Arosio

risparmiandoti cosi' anche la variabile globale fmCaller.
Infatti mi e' sembrato strano. :-)
Owner! In mezzo alle altre proprieta' non l'avevo visto.
Ora lo provo subito.
Grazie anche agli altri che mi hanno risposto, ma se funziona cosi'
questa e' la soluzione piu' pulita ed adatta al mio caso.
Bye.
- Mariano.-