Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    247

    Form accettazione licenza

    Sto realizzando un programmino in Delphi... Ho creato un form nel quale andrà la licenza con i pulsanti "Accetta" e "Rifiuta". Stavo cercando un modo per far caricare il form all'avvio prima degli altri, e se l'utente clicca su Accetta, il caricamento prosegue, altrimenti si chiude il programma.

    Ecco il codice:

    codice:
            Application.Initialize;
            Application.Title := 'TitoloProgramma';
    
             { crea ti vari form }
    
            Application.CreateForm(TFormLicenza, FormLicenza); {crea il form con la licenza}
    
            if FormLicenza.ShowModal = mrOK then
                Application.Run
             else
                Application.Terminate;
    Lì per lì funziona. Se l'utente clicca su "Accetta" compare il form principale, altrimenti sparisce tutto. Il problema è che dopo qualche secondo appare il classico errore di Windows di quando un'applicazione dev'essere terminata, e se clicco su "Chiudi" riappare di nuovo, all'infinito...

    Cos'è che sbaglio?

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Qualsiasi applicazione VCL Win32 ha un MainForm, e termina quando il form principale viene chiuso. Nel tuo caso, l'applicazione termina proprio per questo motivo: usa la finestra della licenza come MainForm.

    Devi creare il form senza usare CreateForm. La chiamata ad Application.Terminate non è invece necessaria.

    codice:
    var
      LicenseAccepted: Boolean;
    
    Application.Initialize;
    Application.Title := 'TitoloProgramma';
    FormLicenza := TFormLicenza.Create(nil);
    try
      LicenseAccepted := (FormLicenza.ShowModal = mrOk);
    finally
      FormLicenza.Free;
    end;
    if LicenseAccepted then
    begin
      Application.CreateForm(TMainForm, MainForm);
      Application.Run;
    end;
    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

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

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    247
    Come al solito, funziona tutto.
    Non capivo la differenza tra CreateForm(TForm, Form) e TForm.Create

    Ti sono molto riconoscente

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Originariamente inviato da firefox88
    Non capivo la differenza tra CreateForm(TForm, Form) e TForm.Create
    L'uso del metodo Create è il modo convenzionale con cui si creano istanze di classi, quindi si può usare per creare form essendo anch'essi oggetti, cioè istanze di classi che discendono da TForm.

    Anche il metodo CreateForm dell'oggetto Application svolge questa operazione, ma esegue alcune istruzioni in più, come la memorizzazione del riferimento della prima form creata in qualità di MainForm.

    Non temere di esaminare il codice sorgente della libreria VCL per approfondire, ad esempio esplorando il metodo CreateForm con un CTRL+clic nei punti in cui appare.

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

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

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    247
    Non temere di esaminare il codice sorgente della libreria VCL per approfondire, ad esempio esplorando il metodo CreateForm con un CTRL+clic nei punti in cui appare.
    No, per carità... Sai bene che ho un rapporto conflittuale con la VCL... :rollo:

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.