Newsgroup: it.comp.lang.delphi
Titolo: Problema con MDI form

Sto sviluppando un'applicazione su diversi Form.
Ogni form lo ho sviluppato su applicazioni singole singolarmente, e ora 
sto mettendo insieme il tutto in un'unica applicazione.
Ma alla creazione di un Form (fsMDIChild) ho un'eccezione di 
EInvalidOperation: 'Cannot create form.No MDI forms are currently active'.
Per farla semplice il mio problema é questo: 
- Creo un' applicazione (fsNormal form) con un bottone.
- Al click del bottone creo un (fsMDIForm) che ha al suo interno un altro 
bottone (bottone2).
- Al click di bottone2 vorrei creare un fsMDIChild form ma qui ho 
l'eccezione.
Da quello che ho capito per tentativi per poter creare un fsMDIChild 
l'fsMDIForm padre deve essere il form principale dell'applicazione.
Come posso risolvere il problema? Un fsMDIForm deve per forza essere il 
form principale dell'Applicazione?
Grazie
F.
--- posted by geoForum on 
http://www.delphiedintorni.it

 active'.
Vai nel menu Project/Options/ e metti la tua form MDIPadre a destra.
Diego


 active'.
Scusa! La fretta!!!!
devi mettere in "Available Forms" anche tutte le form figlie della tua 
form padre e crearle dinamicamente.
Diego



Grazie per l'attenzione, ma purtroppo quello che mi hai suggerito lo avevo già fatto!
Il problema, ridotto all' osso è banale, ma purtroppo non riesco a risolverlo e non posso 
assolutamente cambiare la gerarchia dei Form.
Ecco il problema passo passo scusa la banalità:
------------------------------------------------------------------------
-Creo una nuova Applicazione.
Aggiungo un bottone a TForm1. (E LASCIO IL FORM come fsNormal)
-Creo un nuovo Form (TForm2)
Aggiungo un bottone a TForm2
setto il form come fsMDIForm
Setto a true la proprietà visible di TForm2
-Creo un nuovo Form (TForm3)
setto il form come fsMDIChild
- Doppio click sul Bottone di TForm1 e all'ascoltatore aggiungo il seguente codice:
var f: TForm2
begin
 f:= TForm2.Create(Self);
end;
- Doppio click sul Bottone di TForm2 e aggiungo il seguente codice:
var f: TForm3
begin
 f:= TForm3.Create(Self);
end;
-Aggiungo a Unit1 "uses Unit2" e a Unit2 "uses Unit3".
- Vado nel menu Project->Options e setto Form2 e Form3 come Available forms.
-----------------------------------------------------------------------------
In ogni caso il problema è lo stesso se non creo dinamicamente i Form, non li metto in 
AvailableForms e se lascio TForm1 come principale!
Grazie mille 
F.


 forms.
Fin qui è tutto apposto! E dici che ti da lo stesso errore?
Mica hai altre MDIForm o MDIChild?
Quando esegui il tuo programma non possono essere create autmaticamente 
MDIChild se non c'è attiva una MDIForm!
Diego


No. Uso Delphi7 e se faccio una nuova applicazione, solamente seguendo le istruzioni che ho 
scritto compare l'eccezione!
Hai provato? non capisco proprio cosa puň essere...
Grazie 
F.


> Hai provato? non capisco proprio cosa può essere...
prima avevo fatto due eseguibili un sdi che chiama un eseguibile in mdi e 
tutto andava bene.
Se si mette tutto insieme viene fuori l'errore.
Nell'help dice solo che se la form principale è una form di una 
applicaizone mdi va settata la proprietà formstyle a fsMDIForm.
Unendo due progetti in questo modo è chiaro che sorgono certi errori, ti 
conviene apportare dei cambiamenti all'applicazione padre in modo che 
tutto sia in MDI o SDI.
Secondo me non hai altra scelta.
Diego


Era proprio quello che temevo !!
Grazie cmq per la pazienza dimostrata.
F.


Se non ricordo male i form MDI sono stati dichiarati obsoleti.
Al loro posto utilizza le proprietà docking che ti permettono di fare
le stesse cose del MDI ma con molti meno problemi
Esempio:
prendi 2 Form
in form1 mettici un bottone ed un panel, imposta la prop DockSite di
quest'ultimo a True
nel bottone scrivi
  form2.ManualDock(panel1);
  form2.show;
saluti
Massimo