Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    92

    [Delphi] distruzione di una form e chiusura di un programma

    Salve,
    cercare un oggetto adatto per questa discussione
    è stato arduo, potrebbe sembrare una banalità, ma...
    mi spiego meglio..
    ho una form di Login che chiaramente si apre per prima...
    in seguito si aprono contemporaneamente la
    MainForm e una finestra di selezione Form2.
    Alla chiusura della Form2 , anzi nel momento in cui la distruggo, distruggo anche la form di login
    che altrimenti rimaneva aperta e visibile...

    -------creazione della MainForm------------

    Application.CreateForm(TfmMain, fmMain);
    try
    fmMain.Height := 670;
    fmMain.Width := 880;
    fmMain.Show;
    except
    on E: Exception do
    begin
    Beep;
    ShowMessage('Errore apertura');
    end;
    end;

    ----------creazione della Form2-----------
    procedure TfmMain.FormActivate(Sender: TObject);
    begin


    Application.CreateForm(TForm2, Form2);
    try
    Form2.ShowModal;
    if Form2.ModalResult = mrOK then begin
    Form2.Free;
    fmLogin.Free;
    end;
    except
    on E: Exception do begin
    Beep;
    ShowMessage('Errore su apertura');
    end;
    end;

    end;


    ----quindi alla chiusura della MainForm----
    procedure TfmMain.Exit1Click(Sender: TObject);
    begin
    ModalResult := mrOK;
    Close;
    end;


    procedure TfmMain.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
    if ModalResult = mrOK then
    Free; // libero la MainForm
    end;


    il PROBLEMA è che il programma mi
    resta comunque in running .. non si chiude !!
    ma non riesco a capire ...dove ho sbagliato...
    forse per qualcuno di voi potrebbe essere più semplice capire dove sto sbagliando...
    il codice che ho riportato dovrebbe essere
    proprio la parte che mi crea errore !!

    Grazie infinite!!

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,283
    Ti riporto alcuni "assiomi" della programmazione Delphi che potrebbero esserti utili.

    Primo fra tutti, il problema della MainForm. Essa è la form principale del programma e deve essere creata attraverso Application.CreateForm nel codice sorgente del programma (file DPR).
    Nessun altra form può essere creata prima di questa, a meno di non utilizzare la scrittura TMyForm.Create(Application), adatta alla creazione di form che devono essere visualizzate o utilizzate prima (finestre di presentazione "SplashForm", finestre di login, ecc.), sebbene il codice relativo debba sempre apparire nel file sorgente del programma e non all'interno di eventi OnCreate di form collegate, ancora più sconsigliati quelli della form principale.

    Ti scrivo un esempio di file sorgente (non verificato):
    codice:
    begin
      Application.Initialize;
      LoginForm := TLoginForm.Create(Application);
      try
        if LoginForm.ShowModal = mrOk then
        begin
          Application.CreateForm(TMainForm, MainForm);
          Application.Run;
        end;
      finally
        LoginForm.Free;
      end;
    end.
    Descrivendo brevemente, si tratta di modificare il sorgente del programma introducendo nuove istruzioni oltre a quelle create da Delphi in automatico; le istruzioni prevedono la creazione di una LoginForm visualizzata tramite ShowModal: se il login va a buon fine, il metodo restituisce mrOk permettendo la creazione della form principale con Application.CreateForm e il lancio dell'applicazione (Application.Run), che corrisponde in realtà all'avvio del thread primario che gestisce i messaggi in arrivo per l'applicazione stessa.

    Ultima indicazione: l'applicazione termina sempre quando si chiude la form principale (MainForm); in alternativa, si può richiamare il metodo Application.Terminate, ma io suggerirei sempre il primo metodo che giudico più sicuro e pulito (poichè richiede le conferme del caso, se previste).

    Spero di averti dato sufficienti indicazioni.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    92
    ho sperimentato il codice che
    mi hai scritto... ma mi genera errore,
    non riconosce mrOK(Controls.pas).

    La mia main form di fatto è la form di Login
    ed il mio problema era che in qualche modo
    l'applicazione rimaneva aperta.

    Quindi ho utilizzato il metodo di cui mi
    hai scritto..in questo modo

    procedure TfmMain.FormDestroy(Sender: TObject);
    begin
    Application.Terminate;
    end;


    in questo modo sembrerebbe tutto risolto!
    Al momento non mi servono conferme...e
    comunque... riducendo a icona la finestra
    Main si vedeva la finestra di login...
    e questo non mi sembrava appropriato !!

    Avevo anche pensato di nascondere
    la visibilità della form di Login in
    alternativa ... ma non sono riuscita a
    trovare il modo per farlo!!!

    Grazie infinite!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.