OnActivate (Delphi)
Contents
Description
This example requires a TApplicationEvents and a TListBox on the form. Select the TApplicationEvents, double-click the OnActivate event, and add the following code to the handler. These events occur when the form gains or loses focus.
Code
procedure TMainForm.ApplicationEventsActivate(Sender: TObject);
begin
lbOther.Items.Add('Event OnActivate');
end;
procedure TMainForm.ApplicationEventsDeactivate(Sender: TObject);
begin
lbOther.Items.Add('Event OnDeactivate');
end;
Uses
- Vcl.AppEvnts.TCustomApplicationEvents.OnActivate ( fr | de | ja )
- Vcl.AppEvnts.TCustomApplicationEvents.OnDeactivate ( fr | de | ja )
Description
This example fills a list box with the names of TDataSources that are present and then fills a DBGrid second form with the data from the selected data source. The DBGrid is not filled until Form2 is activated. The following code is for Form1, which fills the list box.
Code
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;
// Do not overwrite an existing table.
// Looking for c:/ProgramFiles/Common Files/Codegear Shared/Data/dbdemos.gdb
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 first 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;
{ Do not 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 first 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;
Uses
- Vcl.Forms.TCustomForm.OnActivate ( fr | de | ja )
- System.Classes.TComponent.ComponentCount ( fr | de | ja )
- System.Classes.TComponent.Components ( fr | de | ja )