Nel Delphi, ogni progetto ha almeno una finestra: la finestra principale del programma. Tutte le finestre di un'applicazione Delphi sono basate su Oggetto TForm.
Modulo
Oggetti forma sono i mattoni di base di un'applicazione Delphi, le finestre reali con cui un utente interagisce quando esegue l'applicazione. I moduli hanno proprietà, eventi e metodi propri con cui è possibile controllarne l'aspetto e il comportamento. Un modulo è in realtà un componente Delphi, ma a differenza di altri componenti, un modulo non viene visualizzato nella tavolozza dei componenti.
Normalmente creiamo un oggetto modulo avviando una nuova applicazione (File | Nuova applicazione). Questo modulo appena creato sarà, per impostazione predefinita, il modulo principale dell'applicazione, il primo modulo creato in fase di esecuzione.
Nota: per aggiungere un modulo aggiuntivo al progetto Delphi, selezionare File | Nuovo modulo.
Nascita
OnCreate
L'evento OnCreate viene generato quando viene creato un TForm, ovvero una sola volta. La dichiarazione responsabile della creazione del modulo si trova nella fonte del progetto (se il modulo è impostato per essere creato automaticamente dal progetto). Quando viene creato un modulo e la sua proprietà Visible è True, si verificano i seguenti eventi nell'ordine elencato: OnCreate, OnShow, OnActivate, OnPaint.
È necessario utilizzare il gestore eventi OnCreate per eseguire, ad esempio, le faccende di inizializzazione come l'allocazione di elenchi di stringhe.
Qualsiasi oggetto creato nell'evento OnCreate deve essere liberato dall'evento OnDestroy.
OnCreate -> OnShow -> OnActivate -> OnPaint -> OnResize -> OnPaint...
OnShow
Questo evento indica che il modulo viene visualizzato. OnShow viene chiamato appena prima che un modulo diventi visibile. Oltre ai moduli principali, questo evento si verifica quando impostiamo la proprietà dei moduli Visible su True o quando chiamiamo il metodo Show o ShowModal.
OnActivate
Questo evento viene chiamato quando il programma attiva il modulo, ovvero quando il modulo riceve lo stato attivo di input. Utilizzare questo evento per modificare il controllo effettivamente attivo se non è quello desiderato.
OnPaint, OnResize
Eventi come OnPaint e OnResize vengono sempre chiamati dopo la creazione iniziale del modulo, ma vengono anche chiamati più volte. OnPaint si verifica prima che tutti i controlli sul modulo vengano verniciati (utilizzarlo per un disegno speciale sul modulo).
Vita
La nascita di una forma non è così interessante come può essere la sua vita e morte. Quando viene creato il modulo e tutti i controlli sono in attesa di eventi da gestire, il programma è in esecuzione fino a quando qualcuno non tenta di chiudere il modulo!
Morte
Un'applicazione guidata dagli eventi si interrompe quando tutti i suoi moduli sono chiusi e non viene eseguito alcun codice. Se un modulo nascosto esiste ancora quando viene chiuso l'ultimo modulo visibile, la tua applicazione sembrerà avere è terminato (perché non sono visibili moduli), ma in realtà continuerà a funzionare fino a quando tutti i moduli nascosti lo saranno chiuso. Basti pensare a una situazione in cui la forma principale viene nascosta in anticipo e tutte le altre forme sono chiuse.
... OnCloseQuery -> OnClose -> OnDeactivate -> OnHide -> OnDestroy
OnCloseQuery
Quando proviamo a chiudere il modulo utilizzando il metodo Close o in altro modo (Alt + F4), viene chiamato l'evento OnCloseQuery. Pertanto, il gestore eventi per questo evento è il luogo in cui intercettare la chiusura di un modulo e prevenirlo. Usiamo OnCloseQuery per chiedere agli utenti se sono sicuri che vogliono davvero chiudere il modulo.
procedura TForm1.FormCloseQuery (Mittente: TObject; var CanClose: Boolean);
inizio
SeMessageDlg('Chiudi davvero questa finestra?', MtConfirmation, [mbOk, mbCancel], 0) = mrCancel poi CanClose: = False;
fine;
Un gestore eventi OnCloseQuery contiene una variabile CanClose che determina se è possibile chiudere un modulo. Il gestore eventi OnCloseQuery può impostare il valore di CloseQuery su False (tramite il parametro CanClose), interrompendo il metodo Close.
OnClose
Se OnCloseQuery indica che il modulo deve essere chiuso, viene chiamato l'evento OnClose.
L'evento OnClose ci offre un'ultima possibilità per impedire la chiusura del modulo. Il gestore eventi OnClose ha un parametro Action, con i seguenti quattro valori possibili:
- Canone. Il modulo non può chiudere. Proprio come se CanClose fosse impostato su False in OnCloseQuery.
- Cahide. Invece di chiudere il modulo lo nascondi.
- caFree. Il modulo viene chiuso, quindi la memoria allocata viene liberata da Delphi.
- caMinimize. Il modulo è ridotto a icona, piuttosto che chiuso. Questa è l'azione predefinita per i moduli figlio MDI. Quando un utente arresta Windows, viene attivato l'evento OnCloseQuery, non OnClose. Se vuoi impedire l'arresto di Windows, inserisci il tuo codice nel gestore eventi OnCloseQuery, ovviamente CanClose = False non lo farà.
OnDestroy
Dopo che il metodo OnClose è stato elaborato e il modulo deve essere chiuso, viene chiamato l'evento OnDestroy. Utilizzare questo evento per operazioni opposte a quelle dell'evento OnCreate. OnDestroy viene utilizzato per deallocare oggetti correlati al modulo e liberare la memoria corrispondente.
Quando il modulo principale per un progetto viene chiuso, l'applicazione termina.