Листинг 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. Здесь также рассматриваются вопросы преобразования путей и приводятся некоторые алгоритмы обхода каталогов, применяемые для поиска.
Прежде чем рассматривать решения конкретных задач, следует уточнить, что за магическое число, а точнее, целочисленная константа используется в некоторых примерах, приведенных далее. Речь идет о константе МАХРАТН, равной 260. Она используется явно или неявно (функциями API) в качестве максимально возможной длины пути. Здесь налицо небольшой парадокс: хотя такая файловая система как FAT32, и реализована так, что может поддерживать неограниченную вложенность каталогов, в реальности не получится создать даже два вложенных каталога с именем длиной 255 символов.