unit MemForm;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, MemMan;

type
  TForm1 = class(TForm)
    BtnRefresh: TButton;
    BtnCreateNil: TButton;
    BtnCreateOwner: TButton;
    BtnFreeLast: TButton;
    LblResult: TLabel;
    Bevel1: TBevel;
    BtnFreeAll: TButton;
    procedure BtnRefreshClick(Sender: TObject);
    procedure BtnCreateNilClick(Sender: TObject);
    procedure BtnCreateOwnerClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure BtnFreeLastClick(Sender: TObject);
    procedure BtnFreeAllClick(Sender: TObject);
  public
    Cbutton: TCountButton;
    procedure Refresh;
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Refresh;
begin
  LblResult.Caption :=
    'Allocated: ' + IntToStr (AllocCount) + #13 +
    'Free: ' + IntToStr (FreeCount) + #13 +
    'Existing: ' + IntToStr (AllocCount - FreeCount);
end;

procedure TForm1.BtnRefreshClick(Sender: TObject);
begin
  Refresh;
end;

procedure TForm1.BtnCreateNilClick(Sender: TObject);
begin
  Cbutton := TCountButton.Create (nil);
  Refresh;
end;

procedure TForm1.BtnCreateOwnerClick(Sender: TObject);
begin
  Cbutton := TCountButton.Create (self);
  Refresh;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Refresh;
end;

procedure TForm1.BtnFreeLastClick(Sender: TObject);
begin
  if Assigned (Cbutton) then
  begin
    Cbutton.Free;
    Cbutton := nil;
  end;
  Refresh;
end;

procedure TForm1.BtnFreeAllClick(Sender: TObject);
var
  I: Integer;
begin
  for I := AllocatedList.Count - 1 downto 0 do
    TCountButton (AllocatedList[I]).Free;
  Cbutton := nil;
  Refresh;
end;

end.
