|
||||
|
Глава 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 infounit 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.
|
|
||
Главная | В избранное | Наш E-MAIL | Добавить материал | Нашёл ошибку | Наверх |
||||
|