Newsgroup: it.comp.lang.delphi
Titolo: [delphi] Richiamare una form

Salve
Dopo avere visto che le applicazioni MDI, non sono il modo migliore per 
la costruzione di una applicazione, ho creato una nuova applicazione.
Visto che sono un neofita, prima di andare avanti con il progetto, vorrei 
conferma su parte del codice da  me scritto.
L'intento è di avere una form principale sempre in primo piano e le altre 
form che si aprono su di essa.
Quello che mi interessa e se il modo in cui richiamo la form e la chiudo 
è giusto.
Il form principale è stato settato con FormStyle=fsNormal, mentre tutte 
le altre form FormStyle=fsStayOnTop.
Questa è la chiamata della form 
procedure TMain.PulsaMain1Button1Click(Sender: TObject);
var
  ChildForm: TFrmClienti;
begin
  ChildForm := TFrmClienti.Create (Self);
  ChildForm.Show;
end;
Questa è la chiusura
procedure TFrmClienti.btnChiudiClick(Sender: TObject);
begin
  Close;
end;
procedure TFrmClienti.FormClose(Sender: TObject; var Action: 
TCloseAction);
begin
    Action := caFree;
end;
Grazie!
--- posted by geoForum on 
http://www.delphiedintorni.it

 form che si aprono su di essa.
Ciao,
ma ti necessita creare le form a runtime?
Se non usi più le MDIForm puoi farne a meno, dipende...
Se devi aprire una form per volta e ti interessa che venga svolta una 
determinata operazione prima di chiuderla puoi usare *showmodal* e lasciare 
la form settata di default.
Inoltre non credo sia necessario il caFree
V

 end;
Questo va tolto.
Saluti,
Klaus 


Veramente no vorrei creare le form a runtime, ho provato a fare delle 
prove e questa è l'unica funzionante.
Immagina un progetto con due form, dalla prima chiamo la seconda, è 
giusto scrivere solo:
NomeForm.show;??????
e per chiudere è sufficiente:
Close;
Mi sembra di impazzire!!!


end;
????



giacchè sei all'inizio dello sviluppo di un progetto sarebbe meglio definire 
se vuoi o meno creare le form a runtime...
cosa intendi con *l'unica funzionante?*
entrambe le strutture devono funzionare !
spiega bene...
se da form1 apri form2 in modalità *show*
  --> form2.show;
potrai chiuderla da form1 con
  --> form2.close;
ma form2 non resterà obbligatoriamente in primo piano
se apri in *modale*
  --> form2.showmodal;
devi chiuderla da form2 stessa
es:
in un button piazzato su form2 metti
close;
V

Non voglio aprire le form a runtime!!
Grazie!!!!!


 ha scritto nel messaggio 
news:69ng7jF...@mid.individual.net...


 ha scritto nel messaggio 
news:48368e7e$0$40211$4faf...@reader5.news.tin.it...


 mettere qui un indirizzo valido e proprio.
Questo non mi risulta proprio. ;-)
Ciao,
   Marco.
-- 
MARCO BREVEGLIERI
  (
http://www.marco.breveglieri.name
)

 form che si aprono su di essa.
Perché invece non lavorare con i Frame, senza aprire finestre multiple?



Per la 50..... volta ho ricominciato il progetto, nei giorni scorsi ho 
fatto varie prove con i frame e alcune cose sono andate lisce altre un po 
meno.
Prima di affrontare i frame DEVO capire come si chiamano i form e si 
chiudono.
Facendo un nuovo progetto abbiamo una form di base e fino qui non c'è 
problema, poi aggiungo un'altra form, quindi nel progetto abbiamo:
Unit1.pas e Unit2.pas.
Se andiamo nelle opzioni progetto ci accorgiamo che la seconda si apre in 
automatico.
A questo punto voi come fate a chiamare la seconda form?
Se volessi che la seconda form, come deve essere si apre su mio comando, 
attraverso le opzioni passiamo la form ad aviabile....
Poi su un tasto inserisco nomeForm.show...
Qui ricevo un errore.
Precedentemente avevo scritto cosi:
procedure TMain.PulsaMain1Button2Click(Sender: TObject);
var
  ChildForm: TFrmFornitori;
begin
  ChildForm := TFrmFornitori.Create (Self);
  ChildForm.Show;
end;
Mi date un consiglio.
Grazie


ok ascolta :
1)     se la nuova form non ti serve che si crei all'avvio dell'applicazione 
, vai in option e passala
        dalle "auto-create forms" alle "Avaliable forms"
2)    Se devi aprire una nuova form in "Modale" puoi usare questo esempio 
(Controlla che nella
        form da dove vuoi richiamare la nuova form sia referenziata l'unit 
delle nuova form "Uses Unit2;" )
        [al click di un bottone metti]
         var
             FormNuova : TForm2;
        Begin
            FormNuova := TForm2.Create(Self);
            Try
                FormNuova.Showmodal;
            Finally
                FormNuova.Free;
            End;
        End;
3)     Se ti serve non "Modale" sempre al click di un bottone scrivi 
semplicemente
        Var
             FormNuova : TForm2;
        Begin
            FormNuova := TForm2.Create(Self);
            FormNuova.Show;
        End;
        Quando hai finito la elimini con FormNuova.Free;
Va bene?
ciao.
-- 
______________________
Gaetano
"Nel coltellino svizzero di Chuck Norris c'č McGyver 


Grazie per i consigli!!!!!


 Qui ricevo un errore.
Quando hai un errore, devi scriverlo, altrimenti non è possibile capire 
a cosa è dovuto.


Delphi crea una variabile globale nella unit del Form in questione[...]
...purtroppo.
Sarebbe sempre bene tirarla via quella variabile TUTTE LE VOLTE e
istanziare i form direttamente. Quella variabile globale porta la
gente a scrivere cose del tipo:
procedure TForm1.btnConfermaClick(Sender: TObject);
begin
  Form1.Label1.Caption := 'pippo';
end;
...ahimé...

 ...ahimé...
Sono perfettamente d'accordo, anche se in certi casi torna comodo (ad 
esempio, la lascio sempre per la MainForm e per i DataModule).
In effetti, non è l'unico caso in cui c'è una sorta di "ambiguità" 
(termine improprio): ad esempio, quando si creano dei "cross module 
reference", quindi si fa in modo che un Form referenzi - a designtime - 
il componente su un altro Form, cosa accade se si creano più istanze di 
entrambi?
E' un meccanismo comodo, ma ogni tanto mi sono soffermato su qualche 
dubbio riguardo il suo funzionamento, nel caso mi ritrovassi appunto 
nella condizione descritta (che è quasi impossibile, considerando 
l'approccio con cui in genere sviluppo le applicazioni).
Comincio ad avere poca memoria per gli "insight" di Delphi... mi 
toccherà ripassare. :-D
