Delphi. Трюки и эффекты - [29]
if GetVolumeInformation(PAnsiChar(root),
PAnsiChar(bufDriveName), 100,
Addr(SN), maxFileName, fsOptions,
PAnsiChar(bufFSName), 100) <> False
then
begin
//Заполняем структуру информацией о диске
with info do
begin
DriveLabel := bufDriveName;
FileSystemName := bufFSName;
SerialNumber := SN;
MaxFileNameLen := maxFileName;
//..параметры файловой системы
with info.FileSystemOptions do
begin
CaseSensitive := fsOptions and FS_CASE_SENSITIVE <> 0;
SupportCompression := fsOptions and
FS_FILE_COMPRESSION <> 0;
IsCompressed := fsOptions and FS_VOL_IS_COMPRESSED <> 0;
end;
end;
//Функция отработала успешно
GetDriveInformation := True;
end
else
//Ошибка
GetDriveInformation := False;
end;
Если проанализировать приведенный листинг, то можно увидеть, что функции GetVolumelnf ormation, кроме пути, принадлежащего диску, передается также:
• буфер для метки диска (и длина этого буфера);
• указатель на переменную типа DWORD для записи в нее серийного номера тома диска (присваивается при каждом создании файловой системы, например, после форматирования диска);
• ссылка на переменную типа Cardinal для сохранения в ней максимальной длины компонента пути (имени файла или папки);
• ссылка на переменную типа Cardinal для сохранения в ней набора битовых флагов с некоторыми параметрами файловой системы;
• буфер для названия файловой системы (и его длина).
Как вы могли заметить, результатом работы приведенной в листинге 4.4 функции GetDrivelnf ormation является заполнение структуры (записи) Drivelnf о. Определение этой структуры (а также вложенной в нее структуры, хранящей некоторые извлеченные из битовой маски fsOptions флаги) приводится в листинге 4.5.
Листинг 4.5.
Определение записей для хранения информации о диске
Type
//Запись некоторых параметров о файловой системе
FSOptions = record
CaseSensitive: Boolean; //При уравнении путей
//учитывает регистр
SupportCompression: Boolean; //Файловая система
//поддерживает сжатие
IsCompressed: Boolean; //Диск сжат
end;
//Запись, содержащая информацию о диске
DriveInfo = record
DriveLabel: String; //Метка диска
FileSystemName: String; //Файловая система диска
FileSystemOptions: FSOptions; //Параметры файловой системы
SerialNumber: DWORD; //Серийный номер тома
MaxFileNameLen: Cardinal; //Максимальная длина имени
//файла
end;
Напоследок рассмотрим еще одну полезную возможность – определение типа носителя диска при помощи 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;
Данная книга предназначена для пользователей Microsoft Excel и содержит описание приемов и методов работы, которые из-за своей специфичности недостаточно представлены (либо вообще не представлены) в пользовательской, справочной и иной соответствующей документации. Изучение приведенных в книге примеров позволит читателю открыть для себя не известные ранее возможности Excel. Предлагаемый материал легко усваивается благодаря тому, что излагается доступным и понятным языком.
В книге кратко и просто описывается язык HTML. Прочитав ее, вы научитесь создавать собственные веб-страницы, причем не только простые, но и содержащие таблицы, видео и звук. Более гибко оформить веб-страницы вам поможет рассмотренная в книге технология CSS. А при желании вы сможете сделать веб-страницы динамичными с помощью сценариев JavaScript: описание этого языка вместе с кратким описанием DOM (объектной модели документа) также приведено в этой книге. В последних главах рассматривается пример создания небольшого сайта с использованием всех рассмотренных в книге технологий, а также освещаются основные вопросы публикации сайта в сети Интернет.Приведенные в книге коды можно найти на сайте www.piter.com.
Данная книга – подробнейшее руководство, посвященное тому, как сделать «свое кино» в программе Pinnacle Studio Plus 11. Это приложение предназначено для домашнего видеомонтажа и отличается простотой в освоении и дружественным интерфейсом. В издании описаны все возможности программы, на примерах рассмотрено, как использовать фильтры и спецэффекты, как захватывать видеоматериал, монтировать видео и звук и как записывать готовый фильм на различные носители, в том числе и на DVD.Книга будет полезна новичкам, осваивающим Pinnacle Studio Plus 11, и опытным пользователям.