Creating a VCL Form Instance Using a Local Variable

From RAD Studio
Jump to: navigation, search

Go Up to How To Build Windows VCL Applications


A safe way to create a unique instance of a modal VCL form is to use a local variable in an event handler as a reference to a new instance. If you use a local variable, it doesn't matter whether the form is auto-created or not. The code in the event handler makes no reference to the global form variable. Using RAD Studio, the following procedure creates a modal form instance dynamically. It (optionally) removes the second form's invocation at startup.

Building this VCL application consists of the following steps:

  1. Create the project directory.
  2. Create two forms for the project.
  3. Remove the second form's invocation at startup (optional).
  4. Link the forms.
  5. Create a control on the main form to create and display the modal form; then write the event handler.
  6. Build and run the application.

To create the two forms

  1. Choose File > New > Windows VCL Application - Delphi or File > New > Windows VCL Application - C++Builder.
  2. Choose File > New > VCL Form - Delphi or File > New > VCL Form - C++Builder.

To optionally remove Form2's invocation at startup

  1. Choose Project > Options > Forms. The Project Options dialog displays.
  2. Select Form2 in the Auto-create forms list and click [>]. Form2 is moved to the Available forms list.
  3. Click OK to close the dialog.

To link Form1 to Form2

  1. Select Form1 and choose File > Use Unit. The Uses Unit dialog displays.
  2. Select Form2 (the form that Form1 needs to reference) in the dialog.
  3. Click OK.

For Delphi, a uses clause containing the unit name Unit2 is placed in the implementation section of Unit1.

For C++, the #include "Unit2.h" directive is added to Unit1.h.

To display Form2 from Form1

  1. Select Form1, if necessary; then, from the Standard page of the Tool Palette, place a TButton on the form.
  2. In the Object Inspector with Button1 selected, double-click the OnClick event on the Events tab. The Code Editor displays with the cursor in the TForm1.Button1Click (Delphi) or TForm1::Button1Click (C++) event handler block.
  3. For Delphi, insert the cursor just above the event handler block and enter the following statement to define a local variable:
var FM: TForm2;
For C++, enter the following variable declaration:
TForm2 *FM;
  1. Insert the cursor in the event handler block, and enter the following code:
FM := TForm2.Create(self);
FM.ShowModal;
FM.Free; 
FM = new TForm2( this );
FM->ShowModal();
FM->Free();

To build and run the application

  1. Save all files in the project; then choose Run > Run. The application executes, displaying Form1.
  2. Click the button. Form2 displays.
  3. With Form2 displayed, attempt to click on Form1 to activate it. Nothing happens.
Click the X in the upper right corner of Form2. Form2 closes and Form1 becomes the active form.

See Also