Friday, November 22, 2019
The Birth, Life and Death of a Delphi Form
The Birth, Life and Death of a Delphi Form In Delphi, every project has at least one window the programs main window. All windows of a Delphi application are based on TForm object. Form Form objects are the basic building blocks of a Delphi application, the actual windows with which a user interacts when they run the application. Forms have their own properties, events, and methods with which you can control their appearance and behavior. A form is actually a Delphi component, but unlike other components, a form doesnt appear on the component palette. We normally create a form object by starting a new application (File | New Application). This newly created form will be, by default, the applications main form - the first form created at runtime. Note: To add an additional form to Delphi project, select File|New Form. Birth OnCreateThe OnCreate event is fired when a TForm is first created, that is, only once. The statement responsible for creating the form is in the projects source (if the form is set to be automatically created by the project). When a form is being created and its Visible property is True, the following events occur in the order listed: OnCreate, OnShow, OnActivate, OnPaint. You should use the OnCreate event handler to do, for example, initialization chores like allocating string lists. Any objects created in the OnCreate event should be freed by the OnDestroy event. OnCreate - OnShow - OnActivate - OnPaint - OnResize - OnPaint ... OnShowThis event indicates that the form is being displayed. OnShow is called just before a form becomes visible. Besides main forms, this event happens when we set forms Visible property to True, or call the Show or ShowModal method. OnActivateThis event is called when the program activates the form - that is, when the form receives the input focus. Use this event to change which control actually gets focus if it is not the one desired. OnPaint, OnResizeEvents like OnPaint and OnResize are always called after the form is initially created, but are also called repeatedly. OnPaint occurs before any controls on the form are painted (use it for special painting on the form). Life The birth of a form is not so interesting as its life and death can be. When your form is created and all the controls are waiting for events to handle, the program is running until someone tries to close the form! Death An event-driven application stops running when all its forms are closed and no code is executing. If a hidden form still exists when the last visible form is closed, your application will appear to have ended (because no forms are visible), but will in fact continue to run until all the hidden forms are closed. Just think of a situation where the main form gets hidden early and all other forms are closed. ... OnCloseQuery - OnClose - OnDeactivate - OnHide - OnDestroy OnCloseQueryWhen we try to close the form using the Close method or by other means (AltF4), the OnCloseQuery event is called. Thus, event handler for this event is the place to intercept a forms closing and prevent it. We use the OnCloseQuery to ask the users if they are sure that they realy want the form to close. procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean) ;begin Ã if MessageDlg(Really close this window?, mtConfirmation, [mbOk, mbCancel], 0) mrCancel then CanClose : False;end; An OnCloseQuery event handler contains a CanClose variable that determines whether a form is allowed to close. The OnCloseQuery event handler may set the value of CloseQuery to False (via the CanClose parameter), aborting the Close method. OnCloseIf OnCloseQuery indicates that the form should be closed, the OnClose event is called. The OnClose event gives us one last chance to prevent the form from closing. The OnClose event handler has an Action parameter, with the following four possible values: caNone. The form is not allowed to close. Just as if we have set the CanClose to False in the OnCloseQuery.caHide. Instead of closing the form you hide it.caFree. The form is closed, so its allocated memory is freed by Delphi.caMinimize. The form is minimized, rather than closed. This is the default action for MDI child forms. When a user shuts down Windows, the OnCloseQuery event is activated, not the OnClose. If you want to prevent Windows from shutting down, put your code in the OnCloseQuery event handler, of course CanCloseFalse will not do this. OnDestroyAfter the OnClose method has been processed and the form is to be closed, the OnDestroy event is called. Use this event for operations opposite to those in the OnCreate event. OnDestroy is used to deallocate objects related to the form and free the corresponding memory. When the main form for a project closes, the application terminates.