Вход/Регистрация
Excel. Трюки и эффекты
вернуться

Гладкий Алексей Анатольевич

Шрифт:

Напоследок рассмотрим еще одну полезную возможность – определение типа носителя диска при помощи API-функции GetDriveType. Она принимает единственный параметр, задающий корневую папку диска (например, С: \, причем обратный слэш на конце обязателен). Функция GetDriveType возвращает целочисленное значение, идентифицирующее тип диска. Вариант получения текстового описания типов дисков с использованием этой API-функции приведен в листинге 4.6.

...

Листинг 4.6.

Определение типа носителя диска

function GetDriveTypeName(root: String): String;

begin

case GetDriveType(PAnsiChar(root)) of

DRIVE_UNKNOWN: GetDriveTypeName := \'Не определен\

DRIVE_REMOVABLE: GetDriveTypeName := \'Сменный\

DRIVE_FIXED: GetDriveTypeName := \'Фиксированный\

DRIVE_REMOTE: GetDriveTypeName := \'Удаленный (сетевой)\

DRIVE_CDROM: GetDriveTypeName := \'Компакт-диск\

DRIVE_RAMDISK: GetDriveTypeName := \'RAM-диск\

else

GetDriveTypeName := \'\' //Возвращается в случае ошибки

end;

end;

Изменение метки диска

Как вы думаете, сложно ли изменить метку диска? Совсем нет: вся сложность состоит в отыскании нужной функции. В данном случае можно применить API-функцию SetVolumeLabel (листинг 4.7).

...

Листинг 4.7.

Изменение метки диска

function SetDriveLabel(root, newLabel: String): Boolean;

begin

SetDriveLabel :=

SetVolumeLabel(PAnsiChar(root), PAnsiChar(newLabel)) <> False;

end;

В листинге 4.7 приведена функция-оболочка для API-функции изменения метки диска, избавляющая нас от необходимости преобразования типов и интерпретации значения, возвращаемого API-функцией.

Программа просмотра свойств дисков

В завершение темы работы с дисками рассмотрим еще небольшой пример, обобщающий сказанное выше. Для этого создадим небольшое приложение, выводящее информацию о любом из дисков компьютера. Приложение должно использовать возможности всех рассмотренных выше функций.

Окно этого приложения приведено на рис. 4.1.

Рис. 4.1. Окно с информацией о дисках

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

...

Листинг 4.8.

Составление списка дисков

procedure TForm1.FormCreate(Sender: TObject);

begin

//Загрузка букв дисков

if GetDriveLetters(cboDrives.Items) > 0 then

begin

//Выделим первый диск

cboDrives.ItemIndex := 0;

cboDrivesSelect(self);

end

else

Button1.Enabled := False;

end;

Загрузка информации о дисках происходит при выборе буквы диска в списке (листинг 4.9).

...

Листинг 4.9. Загрузка информации о выбранном диске

procedure TForm1.cboDrivesSelect(Sender: TObject);

var info: DriveInfo;

root: String;

fullSize, freeSize: Int64;

begin

root := cboDrives.Items[cboDrives.ItemIndex];

//Загружаем информацию о выбранном диске

GetDriveInformation(root, info);

//Общая информация о диске и файловой системе

txtLabel.Text := info.DriveLabel;

txtDriveType.Text := GetDriveTypeName(root);

txtFSName.Text := info.FileSystemName;

txtSN.Text := IntToHex(Int64(info.SerialNumber), 8);

txtMaxFileName.Text := IntToStr(Integer(info.MaxFileNameLen));

//Флажки некоторых свойств файловой системы

chkCaseSensitive.Checked := info.FileSystemOptions.CaseSensitive;

chkCompression.Checked := info.FileSystemOptions.SupportCompression;

chkCompressed.Checked := info.FileSystemOptions.IsCompressed;

//Размер диска

fullSize := GetDriveSize(root);

if fullSize <> –1 then

freeSize := GetDriveFreeSpace(root)

else

begin //Ошибка при обращении к диску

fullSize := 0;

freeSize := 0;

end;

//..формирование диаграммы

driveSize.Series[0].Clear;

driveSize.Series[0].Add( freeSize, \'Свободно\');

driveSize.Series[0].Add( fullSize – freeSize, \'Занято\')

end;

При нажатии кнопки Изменить производится попытка присвоить выбранному в списке диску метку, введенную в соответствующее текстовое поле (txtLabel) (листинг 4.10).

...

Листинг 4.10.

Задание новой метки диска

procedure TForm1.Button1Click(Sender: TObject);

begin

//Изменение метки диска

if not SetDriveLabel(cboDrives.Items[cboDrives.ItemIndex],

txtLabel.Text)

then

MessageBox(self.Handle, \'Не удалось поменять метку диска\',

\'Ошибка\', MB_ICONEXCLAMATION)

else

//Перечитаем информацию о диске

cboDrivesSelect(self);

end;

Табличное или иное описание свойств элементов управления не приводится, так как имена элементов управления соответствуют виду информации, помещаемой в них. Только следует уточнить, что в элементе управления TChart создан один ряд типа Pie (круговая диаграмма). У этого ряда отключено отображение подписей к диаграмме, чтобы не дублировать данные, приведенные в легенде.

4.2. Каталоги и пути

В этом разделе описываются некоторые полезные примеры, позволяющие узнавать расположение важных каталогов операционной системы Windows. Здесь также рассматриваются вопросы преобразования путей и приводятся некоторые алгоритмы обхода каталогов, применяемые для поиска.

  • Читать дальше
  • 1
  • ...
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: