Newsgroup: it.comp.lang.delphi
Titolo: HELP ME "Cannot create form. No MDI Forms are currently active."

Salve a tutti ho un problema che non riesco a risolvere.
Uso Delphi 7 professional.
ho un project1 che è composto da 15 form.
1ª form TPswForm
2ª form TMainForm
3ª ... 15ª TFormsVarie
Ora TMainForm è la form principale ed è una "fsMDIForm" le altre sono 
"fsMDIChild",
TPswForm esce prima di tutte e se l'utente inserisce i dati corretti apre la 
TMainForm.
Fino qui non ci sono problemi, il problema nasce nel momento che quando vado 
ad aprire
una form di tipo "fsMDIChild" esce il seguente errore:
"Cannot create form. No MDI Forms are currently active."
Come posso eliminare questo errore? 

 Come posso eliminare questo errore? 
E' possibile che un qualsiasi form "child" venga creato quando il form 
MDI principale non è ancora tale oppure non è visibile.
Verifica che nessuno dei "child form" sia nell'elenco "Auto create 
forms" delle opzioni di progetto.
In secondo luogo, controlla come hai istanziato la classe TPswForm, che 
ha tutta l'aria di trattarsi di una maschera di login: non dovrebbe mai 
figurare come form principale.
Aggiungi qualche altro dettaglio o le parti significative del codice 
coinvolto nel problema se ti servono maggiori delucidazioni.
Ciao! :-)
-- 
MARCO «Alka» BREVEGLIERI
   (
http://www.marco.breveglieri.name
)
Leggi le FAQ di ICLD: 
http://icld.altervista.org

figurare come form principale.
Mi sa che il problema sta (come hai detto tu) nella TPswForm che l'ho messa
come form principale.
Come potrei fare per far partire TPswForm senza farla figurare come form
principale?
Vincenzo Di Falco
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 principale?
Modifica il sorgente del file DPR stesso creando il form utilizzando la 
scrittura:
   PswForm := TPswForm.Create(nil);
Il form di inserimento password dovrebbe contenere inoltre un metodo che 
visualizzi il form stesso e restituisca il risultato dell'autenticazione 
secondo il tuo procedimento personalizzato; usando un blocco 
*if...then*, dovresti verificare questa condizione e, successivamente, 
solo se l'autenticazione va a buon fine, consentire la creazione del 
form MDI principale.


                   Ti ringrazio del consiglio, ma io con il dpr e PswForm :=
TPswForm.Create(nil);
non l'ho mai fatto e non so nemmeno dove mettere le mani.
Rimani sepre uno dei migliori di questo NewsGroup.
Grazie.


 non l'ho mai fatto e non so nemmeno dove mettere le mani.
Una curiosità: se ti si presenta una bionda affascinante che ti chiede 
di "farlo" lì dove sei, sul posto, brutalmente e subito, cosa le 
rispondi? «Ma non l'ho mai fatto»? :-D
Tutto ciò che non hai fatto si può ovviamente imparare! ;-)
Vista la banalità relativa della cosa, dovresti magari fare un passo 
indietro e documentarti maggiormente sui fondamenti di Delphi.


 Tutto ciò che non hai fatto si può ovviamente imparare! ;-)
Premesso che le bionde (anche se molto ma molto bone le schifo), devi sapere
che con la programmazione ho incominciato un pò tardi (3 anni fa e ne ho 36)
a differenza di voi. Comunque ci sono riuscito e posto la mia soluzione a
chi ne avesse bisogno.
Nel file *.dpr bisogna inserire questo codice.
begin
  Application.Title := 'Project1';
  Application.Initialize;
  begin
    with TPswForm.Create(nil) do
    try
      ShowModal;
      Update;
      if ModalResult = mrOK then
      begin
        Application.CreateForm(TMainForm, MainForm);
        Application.Run;
      end
      else
        Application.Terminate;
    finally
    Free;
  end;
end.
Nella form della Password e Username bisogna inserire questo codice.
(Sull'evento OnClick del tasto per effettuare la verifica)
procedure TPswForm.Button1Click(Sender: TObject);
begin
  if (Edit1.Text = '') or (Edit2.Text = '') then
  ShowMessage('L''Username e la Password sono entrambi obbligatori.')
  else
  begin
    Query1.Close;
    Query1.SQL.Clear;
    Query1.SQL.Add('Select * from Utenti');
    Query1.Open;
    if not Query1.Locate('Username',Edit1.Text,[]) then
    ShowMessage('L''Username inserito non è corretto.')
    else
    begin
      if Edit2.Text = Query1Password.Value then
      ModalResult := mrOK
      else
      ShowMessage(('La Password inserita è errata.');
    end;
  end;
end;
Saluti a tutti
Vincenzo Di Falco


Vincenzo Di Falco ha scritto:
[cut]
Attenzione al codice troppo "complesso" scritto all'interno del .dpr: 
anche se è del tutto legale e funzionante, il contenuto di questo file è 
continuamente gestito dall'ambiente di sviluppo. Quindi se non trova le 
informazioni come se le aspetta, all'aggiunta di nuove Form o DataModule 
può fare strani scherzi. In particolare ho notato che a me "perde" 
sempre la MainForm tra le property del progetto e se cerco di rimetterla 
  praticamente mi cambia tutte le carte in tavola.
Quindi il suggerimento è quello di tenere i codice piu possibile 
"simile" a quello originario senza aggiungere troppo codice.
Qualcosa del genere:
"
begin
Application.Initialize;
Application.CreateForm(TdmAppConfig, dmAppConfig);
Application.CreateForm(TdmCommesse, dmCommesse);
Application.CreateForm(TdmCommesseTb, dmCommesseTb);
{ Inizializzazione database di configurazione }
dmAppConfig.InitializeIniFile;
dmAppConfig.InitializeApConf;
{ Login dell'Utente }
if not dmAppConfig.tbUtenti.Eof then
   dmAppConfig.tbUtenti.Next;
frmLogin := TfrmLogin.Create(Application);
try
   if frmLogin.ShowModal = mrCancel then
     raise Exception.Create(MSG_LOGIN_001);
finally
   frmLogin.Free;
end;
{ Visualizzazione Form Splash }
frmSplash := TfrmSplash.Create(Application);
frmSplash.Show;
frmSplash.Refresh;
Sleep(2000);
{ Inizializzazione dell'applicazione }
Application.CreateForm(TdmAppController, dmAppController);
Application.CreateForm(TdmLavorazioni, dmLavorazioni);
dmLavorazioni.LoadDbInformations;
dmLavorazioni.InitializeDatabase;
dmCommesse.LoadDbInformations;
dmCommesse.InitializeDatabase;
Application.CreateForm(TfrmMain, frmMain);
frmSplash.Close;
frmSplash.Free;
Application.Run;
end.
"
In questo modo, benché l'applicazione esegua un elevato numero di 
operazioni all'avvio, l'algoritmo del Main Program resta comunque 
"comprensibile" all'ambiente di sviluppo e riesce a gestirlo correttamente.
Ciao,
Gianluca.

Ho controllato, a me funziona tutto bene e non mi da nessun errore.
Se qualcuno vuole vedere il progetto il link è questo
http://www.jojoba-online.it/temp/usrpsw.zip
Sono 373 Kb.
ciao
