Delphi. Учимся на примерах - [19]
>end;
>end.
⊚ Все файлы проекта и исполняемый файл рассмотренной программы находятся на прилагаемом к книге компакт-диске в папке Chapter 10.
Глава 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.
>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;
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Сейчас во многих школах, институтах и других учебных заведениях можно встретить компьютеры старого парка, уже отслужившие свое как морально, так и физически. На таких компьютерах можно изучать разве что Dos, что далеко от реалий сегодняшнего дня. К тому же у большинства, как правило, жесткий диск уже в нерабочем состоянии. Но и выбросить жалко, а новых никто не дает. Различные спонсоры, меценаты, бывает, подарят компьютер (один) и радуются, как дети. Спасибо, конечно, большое, но проблемы, как вы понимаете, этот компьютер в общем не решает, даже наоборот, усугубляет, работать на старых уже как-то не хочется, теперь просто есть с чем сравнивать.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.