Теперь обеспечим настройку автообновления данных о памяти. Для этого нам понадобится компонент 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.
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;