Newsgroup: it.comp.lang.delphi
Titolo: Percorso generazione form

Salve
con D7
ho una form che può essere generata e richiamata da due form diverse.
Da dentro la form chiamata cè una proprietà che mi indica quale
"percorso" è stato eseguito per eseguirla ? Intendo quale delle
due form l'ha generata ?
Grazie
C. 

 due form l'ha generata ?
Dipende da come è stata creata e, in particolare, qual è l'owner
specificato all'atto della creazione.  Se si crea una form nel modo
seguente:
procedure TMyClass.MyMethod;
begin
  ...
  with TMyForm.Create(Self) do 
    try 
      ...
Allora alla nuova istanza di TMyForm sto dando come Owner l'istanza della
classe TMyClass e quindi da TMyForm posso costruire il percorso
all'indietro, e così via per le form create da TMyForm.
Ma la mia domanda è: perché CAPPERI ti serve fare una cosa del genere?
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 -- 
Mi serve perchè il comportamento della form figlia sarà leggermente diverso 
a seconda di chi la chiama.
Ad esempio se viene premuto il tasto elimina, dopo aver eliminato il record 
selezionato devo chiudere la form;
in altri casi invece dopo aver eliminato il record aspetto un azione 
dell'utente.
Stò utilizzo il seguente codice in entrambe le form "madri" per creare la 
form figlia:
    xxxForm:=TxxxForm.Create(Self);
    xxxForm.ShowModal;
    xxxForm.Free;
    xxxForm:=nil;
Cosa dovrei o potrei mettere al posto di Self da poter testare ?
Grazie
C. 

 diverso a seconda di chi la chiama.
Non va per niente bene, stai accoppiando informazioni, cambia strategia.
Le form devono avere una logica autocontenuta e non dipendere da altre
form.
Rischi di fare un pasticcio terribile.



Non credo proprio, anzi è proprio qui il vantaggio: avere una form 
riutilizzabile.
Grazie del consiglio.
Rimane aperta la domanda: data una form come faccio a sapere chi è il padre 
(o la madre) ?
Grazie a chi risponderà.
C. 

 Rimane aperta la domanda: data una form come faccio a sapere chi è il padre
(o la madre) ?
Te l'ho già detto.


 
Io (IMHO) farei cosi' :
1) Metti una property sulla form di tipo Integer o string o come vuoi e 
prima di chiamare lo showmodal assegni la property e la testi nel FormShow:
   with TFormCustom.Create(Self) do
     try
       sFormGenitore := 'A';  // <--- valorizzazione della property
       showModal;
     finally
       free
     end;
2) Nel FormShow o nel FormCreate testi la proprietà owner della form ti 
dice chi è il genitore.
Saluti Goblin
-- 
Ibis et redibis non morietur in bellum.

 dice chi è il genitore.
L'Owner della form può essere benissimo impostato a nil perché a creare la
form potrebbe non essere un componente specifico, oppure potrebbe esserlo
e impostare volutamente il valore dell'Owner a nil.
Evitate di adottare queste tecniche orribili, anche perché non ce n'è
bisogno per qualsiasi scopo a cui destiniate le vostre form.
La logica di una form deve essere autocontenuta e sempre valida; solo così
si creano finestre che è possibile riutilizzare. La loro vita non deve
dipendere da quella di altre form "precedenti" ad esse, nella vita
dell'applicazione.



Grazie ho risolto.
C 

 Grazie ho risolto.
Bravo, non voglio neanche sapere come ;-)


 oppure i valori dei parametri passati alla form. 
Sono d'accordo con te Andrea; questo però è un problema che non sono mai 
stato capace di risolvere: come passare parametri a una Form ?
Mi dài una dritta ?
Grazie
Guido

 stato capace di risolvere: come passare parametri a una Form ?
Ci sono diversi modi, a seconda di come la form dovrà aprirsi e di come si
vogliono recuperare i risultati.  Una via è quella di usare le property,
vengono impostate quelle di "input" prima che la form venga aperta con
ShowModal e si leggono i dati di "output".  Questo approccio non mi piace
moltissimo, benché comodo.  Un'altra via che seguo più spesso è quella di
wrappare lo ShowModal in un metodo del tipo:
function Execute( // parametri di input ; var // parametri di outpu):
TModalResult;
alla stregua di quanto avviene per le "dialog" distribuite con Delphi.
Un esempio:
function TMyCalculatorForm.Execute(AExpr: String; var AExprResult:
Double): TModalResult;
begin
  FExpr := AExpr;
  Result := ShowModal;
  if (Result = mrOK) then
    AExprResult := FExprResult;
end;
procedure TMyCalculatorForm.btnCalcClick()
begin
  FExprResult := EvaluateExpression(FExpr);
end;
