Logo New book: Delphi 2007 Handbook
My blog in online
Delphi tech support service: support.marcocantu.com
Google
  Web www.marcocantu.com

Menu for Development

Site Menu
Delphi 2007 Handbook
Mastering Borland Delphi 2005
Essential Pascal
Essential Delphi
Buy Books Online
Code Repository
Newsgroups
White Papers
Tools
Conferences
Training
Delphi Links
Contact Marco

My Other Sites
Italian Site (www.marcocantu.it)
Developers Newsgroups Browser (dev.newswhat.com)
My town (www.piazzacavalli.net)
the delphi search
Wintech Italia (my company)

Breaking News
Buy Mastering Borland Delphi 2005 from Amazon
Free ebook: Mastering Delphi Update for Delphi 2006

Advertising
Home My Blog Books My Bookstore Development Links Marco



Home: Code Repository: Mastering Delphi 5

Project VCLMEM

Project Structure


VCLMEM.DPR

program VclMem;

uses
  Forms,
  MainForm in 'MainForm.pas' {FormMain},
  MemForm in 'MemForm.pas' {FormMemStatus};

{$R *.RES}

begin
  Application.Initialize;
  Application.CreateForm(TFormMain, FormMain);
  Application.Run;
end.

MAINFORM.PAS

unit MainForm;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TFormMain = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FormMain: TFormMain;

implementation

uses MemForm;

{$R *.DFM}

procedure TFormMain.Button1Click(Sender: TObject);
begin
  if not Assigned (FormMemStatus) then
    FormMemStatus := TFormMemStatus.Create (nil);
  FormMemStatus.Show;
end;

end.

MEMFORM.PAS

unit MemForm;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Grids, ExtCtrls, StdCtrls;

type
  TFormMemStatus = class(TForm)
    StringGrid2: TStringGrid;
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormMemStatusClose(Sender: TObject;
      var Action: TCloseAction);
  private
    procedure UpdateStatus;
  public
    s: string;
    sl: TStringList;
    f: TForm;
  end;

var
  FormMemStatus: TFormMemStatus;

implementation

{$R *.DFM}

procedure TFormMemStatus.UpdateStatus;
var
  HeapStatus: THeapStatus;
begin
  HeapStatus := GetHeapStatus;
  with HeapStatus do
  begin
    StringGrid2.Cells [1, 0] := FloatToStrF (
      TotalAddrSpace div 1024,
      ffNumber, 20, 0) + ' Kbytes';
    StringGrid2.Cells [1, 1] := FloatToStrF (
      TotalUncommitted div 1024,
      ffNumber, 20, 0) + ' Kbytes';
    StringGrid2.Cells [1, 2] := FloatToStrF (
      TotalCommitted div 1024,
      ffNumber, 20, 0) + ' Kbytes';
    StringGrid2.Cells [1, 3] := FloatToStrF (
      TotalFree div 1024,
      ffNumber, 20, 0) + ' Kbytes';
    StringGrid2.Cells [1, 4] := FloatToStrF (
      TotalAllocated div 1024,
      ffNumber, 20, 0) + ' Kbytes';
    StringGrid2.Cells [1, 5] := IntToStr (
       TotalAllocated div (TotalAddrSpace div 100)) + '%';
    StringGrid2.Cells [1, 6] := FloatToStrF (
      FreeSmall div 1024,
      ffNumber, 20, 0) + ' Kbytes';
    StringGrid2.Cells [1, 7] := FloatToStrF (
      FreeBig div 1024,
      ffNumber, 20, 0) + ' Kbytes';
    StringGrid2.Cells [1, 8] := FloatToStrF (
      Unused div 1024,
      ffNumber, 20, 0) + ' Kbytes';
    StringGrid2.Cells [1, 9] := FloatToStrF (
      Overhead div 1024,
      ffNumber, 20, 0) + ' Kbytes';
  end;
end;

procedure TFormMemStatus.FormCreate(Sender: TObject);
begin
  StringGrid2.Cells [0, 0] := 'Available address space ';
  StringGrid2.Cells [0, 1] := 'Uncommitted portion';
  StringGrid2.Cells [0, 2] := 'Committed portion';
  StringGrid2.Cells [0, 3] := 'Free portion';
  StringGrid2.Cells [0, 4] := 'Allocated portion';
  StringGrid2.Cells [0, 5] := 'Address space load';
  StringGrid2.Cells [0, 6] := 'Total small free blocks';
  StringGrid2.Cells [0, 7] := 'Total big free blocks';
  StringGrid2.Cells [0, 8] := 'Other unused blocks';
  StringGrid2.Cells [0, 9] := 'Total overhead';

  UpdateStatus;
end;

procedure TFormMemStatus.Timer1Timer(Sender: TObject);
begin
  UpdateStatus;
end;

procedure TFormMemStatus.FormMemStatusClose(Sender: TObject;
  var Action: TCloseAction);
begin
  Action := caFree;
  FormMemStatus := nil;
end;

end.

MAINFORM.DFM

object FormMain: TFormMain
  Left = 229
  Top = 249
  Width = 287
  Height = 181
  Caption = 'VclMem'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object Button1: TButton
    Left = 96
    Top = 56
    Width = 75
    Height = 25
    Caption = 'About...'
    TabOrder = 0
    OnClick = Button1Click
  end
end

MEMFORM.DFM

object FormMemStatus: TFormMemStatus
  Left = 259
  Top = 160
  Width = 348
  Height = 281
  Caption = 'Memory Status'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = True
  OnClose = FormMemStatusClose
  OnCreate = FormCreate
  PixelsPerInch = 96
  TextHeight = 13
  object StringGrid2: TStringGrid
    Left = 0
    Top = 0
    Width = 340
    Height = 254
    Align = alClient
    ColCount = 2
    DefaultColWidth = 166
    RowCount = 10
    FixedRows = 0
    TabOrder = 0
    RowHeights = (
      24
      24
      24
      24
      24
      24
      24
      24
      24
      24)
  end
  object Timer1: TTimer
    OnTimer = Timer1Timer
    Left = 40
    Top = 32
  end
end