RAD Studio VCL Reference
ContentsIndex
PreviousUpNext
TPropertyPage.OnActivate Event

Occurs when the form becomes active.

Pascal
property OnActivate: TNotifyEvent;
C++
__property TNotifyEvent OnActivate;

Use OnActivate to perform special processing when the form receives focus. A form becomes active when focus is transferred to it (when the user clicks on the form, for example).

Note: The OnActivate event of the application (TApplication), not the form, occurs when Windows switches control from another application.
 

Delphi Examples: 

 

{
Here is the code on Form1 that fills the list box.
}
var
  Form1: TForm1;
  Customers: TTable;
  Blobs: TTable;
  Form1Done : Boolean;
  procedure CreateMyTable;
  procedure CreateCustSource;
  procedure CreateBlobSource;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  I: Integer;
begin
  CreateCustSource;
  CreateBlobSource;
  for I := 0 to ComponentCount - 1 do
  begin
    if (Components[I] is TDataSource) then
      ListBox1.Items.AddObject(Components[I].Name,
        Components[I] as TObject);
  end;
end;

procedure CreateCustSource();
begin
  Customers:= TTable.Create(Form1);
  with Customers do
  begin
    DatabaseName := 'DBDEMOS';
    TableType := ttParadox;
    TableName := 'MyCustInfo';
    ReadOnly:= False;

//    Don't overwrite an existing table
    if (not Customers.Exists) then CreateMyTable
    else
    begin
      if (Customers.Exists AND
        (MessageDlg('MyCustInfo table already exists.  Do you want to rebuild it?', mtConfirmation, [mbYes, mbNo], 0) = mrYes)) then
      begin
        Customers.Close;
        Customers.DeleteTable;
        CreateMyTable;
      end;
    end;
  end;
  Form1.CustomerDS.DataSet:= Customers;
  Customers.Active:= True;
end;

procedure CreateMyTable();
var
  i: Integer;
begin
//      The Table component must not be active
//      First, describe the type of table and give
//      it a name
//      Next, describe the fields in the table
  with Customers do
  begin
      with FieldDefs do
      begin
        Clear;
        with AddFieldDef do
        begin
          Name := 'Field1';
          DataType := ftInteger;
          Required := True;
        end;
        with AddFieldDef do
        begin
          Name := 'Field2';
          DataType := ftString;
          Size := 30;
        end;
        with AddFieldDef do
        begin
          Name := 'Field3';
          DataType := ftString;
          Size := 30;
        end;
        with AddFieldDef do
        begin
          Name := 'Field4';
          DataType := ftString;
          Size := 30;
        end;
      end;

//    Take out this part to remove indexing
//    Next, describe any indexes
      with IndexDefs do
      begin
        Clear;
//        The 1st index has no name because it is
//        a Paradox primary key
        with AddIndexDef do
        begin
          Name := '';
          Fields := 'Field1';
          Options := [ixPrimary];
        end;
        with AddIndexDef do
        begin
          Name := 'Fld2Indx';
          Fields := 'Field2';
          Options := [ixCaseInsensitive];
        end;
      end;

//      Call the CreateTable method to create the table
      CreateTable;
      Customers.Active:= True;
      for i := 1 to 20 do
        Customers.AppendRecord([i*111, i*222, i*333, i*444]);
    end;
end;

procedure CreateBlobSource;
var
  i: Integer;
begin
  Blobs:= TTable.Create(Form1);
  with Blobs do
  begin
    DatabaseName := 'DBDEMOS';
    TableType := ttParadox;
    TableName := 'MyBlobInfo';
    Blobs.Active := False;
    { Don't overwrite an existing table }
//    if Blobs.Exists then
//      MessageDlg('CustInfo table already exists.', mtWarning, [mbOK], 0)
//    else
    begin
      if (Blobs.Exists) then
      begin
        Blobs.Close;
        Blobs.DeleteTable;
      end;
      { The Table component must not be active }
      { First, describe the type of table and give }
      { it a name }
      { Next, describe the fields in the table }
      with FieldDefs do
      begin
        Clear;
        with AddFieldDef do
        begin
          Name := 'Field1';
          DataType := ftInteger;
          Required := True;
        end;
        with AddFieldDef do
        begin
          Name := 'Field2';
          DataType := ftBlob;
          Size := 30;
        end;
      end;
      { Next, describe any indexes }
      with IndexDefs do
      begin
        Clear;
        { The 1st index has no name because it is
        { a Paradox primary key }
        with AddIndexDef do
        begin
          Name := '';
          Fields := 'Field1';
          Options := [ixPrimary];
        end;
{
        with AddIndexDef do
        begin
          Name := 'Fld2Indx';
          Fields := 'Field2';
          Options := [ixCaseInsensitive];
        end;
}
      end;
      { Call the CreateTable method to create the table }
      CreateTable;
      Blobs.Active:= True;
      for i := 1 to 20 do
        Blobs.AppendRecord([i*111, IntToStr(i*222)]);
    end;
  end;
  Form1.BlobDS.DataSet:= Blobs;
  Blobs.Active:= True;
end;

procedure TForm1.ListBox1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Form1Done := True;
end;

initialization

Form1Done := False;
{
The following code sets the DataSource for a DBGrid
component in Form2 to the currently selected data source in
a list provided in Form1. This allows users to specify the
desired information in Form1, and then move to Form2 to view
the information. Select an item in the listbox and then
activate Form2 by clicking in it.
}
procedure TForm2.FormActivate(Sender: TObject);
begin
  if (Form1Done) then
  begin
    DBGrid2.DataSource :=
      Form1.ListBox1.Items.Objects[Form1.ListBox1.ItemIndex] as TDataSource;
    DBNavigator2.DataSource :=
      Form1.ListBox1.Items.Objects[Form1.ListBox1.ItemIndex] as TDataSource;
  end;
end;

 

Copyright(C) 2008 CodeGear(TM). All Rights Reserved.
What do you think about this topic? Send feedback!