• Постановка задачи
  • Разработка формы
  • Разработка программного кода
  • Полный исходный код модуля
  • Глава 11

    Информация о памяти

    Постановка задачи

    Разработать программу, которая отображает информацию о физической, страничной и виртуальной памяти.

    Разработка формы

    Создайте новый проект Delphi и присвойте свойству Caption формы значение Memory Info.

    Для вывода различной информации о памяти мы будем использовать компонент Label категории Standard. Разместите на форме один над другим семь таких компонентов, присвоив свойству Left каждого из них значение 230, а свойству Caption — значение 0.

    Слева от этого столбца меток разместите в столбец еще семь компонентов Label, которые будут пояснять числа, отображаемые предыдущими семью метками. Присвойте их свойству Caption следующие значения (сверху вниз): Загруженность памяти:, Всего физической:, Свободно физической:, Всего страничной:. Свободно страничной:, Всего swap: И Свободно swap:.

    Еще одним способом отображения загруженности физической памяти будет компонент Gauge категории Samples. Разместите этот компонент вдоль правого края формы и измените значение его свойства Kind на gkVerticalBar, чтобы изменения свойства Gauge.Progress отображались вдоль вертикальной шкалы.

    Теперь обеспечим настройку автообновления данных о памяти. Для этого нам понадобится компонент Timer категории System. Пользователь будет задавать период обновления информация о памяти, с помощью компонента SpinEdit категории Samples. В его свойствах следует изменить значение MaxValue на 60, a MinValue — на 1. Это даст возможность пользователю задавать диапазон обновления от 1 до 60 секунд.

    Слева от компонента SpinEdit разместите поясняющую метку с текстом Частота обновления:, а справа — метку с текстом секунд.

    В правом нижнем углу формы разместите кнопку (компонент Button категории Standard) и присвойте ее свойству Caption значение Установить. По нажатию этой кнопки будет устанавливаться указанная в компоненте SpinEdit частота обновления информации.

    Полученная форма должна соответствовать рис. 11.1.

    Рис. 11.1. Форма для отображения информации о памяти компьютера

    Разработка программного кода

    В программе будет только две процедуры: первая — обработчик события Timer1.OnTimer, которая определяет и отображает информацию о памяти; вторая — обработчик события OnClick кнопки Установить для задания частоты обновления информации.

    Создадим вначале главную часть программы — обработчик события Timer1.OnTimer:

    procedure TForm1.Timer1Timer(Sender: TObject);

    var

     mem: TMemoryStatus; //хранит всю информацию о памяти

    begin

     mem.dwLength:= SizeOf(mem); //размер памяти

     GlobalMemoryStatus(mem); //узнаем всю информацию о памяти

     //выводим информацию в соответствующие метки

     with mem do begin

      // Загруженность памяти

      Label1.Caption:= IntToStr(dwMemoryLoad) + ' %';

      Label2.Caption:= IntToStr((dwTotalPhys) div 1024) + 'Кбайт'; // Всего физической

      Label3.Caption:= IntToStr((dwAvailPhys) div 1024) + 'Кбайт'; // Свободно физической

      Label4.Caption:= IntToStr((dwTotalPageFile) div 1024) + 'Кбайт'; // Всего страничной

      Label5.Caption:= IntToStr((dwAvailPageFile) div 1024) + 'Кбайт'; // Свободно страничной

      Label6.Caption:= IntToStr((dwTotalVirtual) div 1024) + 'Кбайт'; // Всего swap

      Label7.Caption:= IntToStr((dwAvailVirtual) div 1024) + ' Кбайт'; // Свободно swap

      Gauge1.MaxValue:= dwTotalPhys; //определяем максимум

      //отображаем процент загруженности памяти

      Gauge1.Progress:= dwTotalPhys-dwAvailPhys;

     end;

    end;

    Сначала мы объявляем переменную mem, которая служит для хранения информации о памяти, полученной с помощью функции GlobalMemoryStatus. После того как мы получили всю необходимую информацию о памяти, делим все значения на 1024, чтобы перевести данные в килобайты. Затем выводим информацию с помощью соответствующих меток, а также изменяем текущую позицию для компонента Gauge.

    Осталось только реализовать изменение частоты обновления информации, для чего достаточно изменять значение свойства Timer1.Interval. Обработаем нажатие кнопки Установить:

    procedure TForm1.Button1Click(Sender: TObject);

    begin

     //установка интервала работы таймера

     Timer1.Interval:= SpinEdit1.Value*1000;

    end;

    Поскольку интервал для таймера задается в мс, а в SpinEdit мы вводим значение в секундах, то мы должны умножать значение свойства SpinEdit.Value на 1000.

    Программа в действии показана на рис. 11.2.

    Рис. 11.2. Программа отображения информации о памяти в действии

    Полный исходный код модуля

    Полный исходный код модуля программы отображения информации о памяти представлен в листинге 11.1.

    Листинг 11.1. Модуль программы Memory info

    unit Unit1


    interface


    uses

     Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Gauges, ExtCtrls, Spin;


    type TForm1 = class(TForm)

     Label1: TLabel;

     Label2: TLabel;

     Label3: TLabel;

     Label4: TLabel;

     Label5: TLabel;

     Label6: TLabel;

     Label7: TLabel;

     Gauge1: TGauge;

     Timer1: TTimer;

     Label8: TLabel;

     Label9: TLabel;

     Label10: TLabel;

     Label11: TLabel;

     Label12: TLabel;

     Label13: TLabel;

     Label14: TLabel;

     SpinEdit1: TSpinEdit;

     Label15: TLabel;

     Label16: TLabel;

     Button1: TButton;

     procedure Timer1Timer(Sender: TObject);

     procedure Button1Click(Sender: TObject);

    private

     { Private declarations }

    public

     { Public declarations }

    end;


    var

     Form1: TForm1;


    implementation

    {$R *.dfm}


    procedure TForm1.Timer1Timer(Sender: TObject);

    var

     mem: TMemoryStatus; //хранит всю информацию о памяти

    begin

     mem.dwLength:= SizeOf(mem); //размер памяти

     GlobalMemoryStatus(mem); //узнаем всю информацию о памяти

     //выводим информацию в соответствующие метки

     with mem do begin

      // Загруженность памяти

      Label1.Caption:= IntToStr(dwMemoryLoad) + ' %';

      Label2.Caption:= IntToStr((dwTotalPhys) div 1024) + 'Кбайт'; // Всего физической

      Label3.Caption:= IntToStr((dwAvailPhys) div 1024) + 'Кбайт'; // Свободно физической

      Label4.Caption:= IntToStr((dwTotalPageFile) div 1024) + 'Кбайт'; // Всего страничной

      Label5.Caption:= IntToStr((dwAvailPageFile) div 1024) + 'Кбайт'; // Свободно страничной

      Label6.Caption:= IntToStr((dwTotalVirtual) div 1024) + 'Кбайт'; // Всего swap

      Label7.Caption:= IntToStr((dwAvailVirtual) div 1024) + ' Кбайт'; // Свободно swap

      Gauge1.MaxValue:= dwTotalPhys; //определяем максимум

      //отображаем процент загруженности памяти

      Gauge1.Progress:= dwTotalPhys-dwAvailPhys;

     end;

    end;


    procedure TForm1.Button1Click(Sender: TObject);

    begin

     //установка интервала работы таймера

     Timer1.Interval:= SpinEdit1.Value*1000;

    end;


    end.

    ⊚ Все файлы проекта и исполняемый файл рассмотренной программы находятся на прилагаемом к книге компакт-диске в папке Chapter_11.





     

    Главная | В избранное | Наш E-MAIL | Добавить материал | Нашёл ошибку | Наверх