Project COUNTOBJ
Project Structure
COUNTOBJ.DPR
program CountObj;
uses
Forms,
CountF in 'CountF.pas' {Form1};
{$R *.RES}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
COUNTF.PAS
unit CountF;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, Menus;
type
TForm1 = class(TForm)
Timer1: TTimer;
procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure Timer1Timer(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TCountButton = class (TButton)
constructor Create (AOwner: TComponent); override;
destructor Destroy; override;
class function GetTotal: Integer;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
var
TotBtns: Integer = 0;
constructor TCountButton.Create (AOwner: TComponent);
begin
inherited Create (AOwner);
Inc (TotBtns);
end;
destructor TCountButton.Destroy;
begin
Dec (TotBtns);
inherited Destroy;
end;
class function TCountButton.GetTotal: Integer;
begin
Result := TotBtns;
end;
procedure TForm1.FormMouseDown(
Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
with TCountButton.Create (Self) do
begin
Parent := Self;
Left := X;
Top := Y;
Width := Width + 60;
Caption := Format ('%d Button at %d, %d',
[GetTotal, X, Y]);
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Caption := Format ('CountObj: %d custom buttons',
[TCountButton.GetTotal]);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
MessageBox (0, PChar (Format (
'There are %d CountButton objects',
[TCountButton.GetTotal])),
'Destroy', mb_OK);
end;
initialization
finalization
MessageBox (0, PChar (Format (
'There are %d CountButton objects',
[TCountButton.GetTotal])),
'Finalization', mb_OK);
end.
COUNTF.DFM
object Form1: TForm1
Left = 204
Top = 106
Width = 394
Height = 296
Caption = 'CountObj'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = True
OnDestroy = FormDestroy
OnMouseDown = FormMouseDown
PixelsPerInch = 96
TextHeight = 13
object Timer1: TTimer
OnTimer = Timer1Timer
Left = 8
Top = 8
end
end
|