Movement of Mind - Движение Разума


Создание виртуальных дисков с помощью subst

Первый полезный пример, который я хочу с тобой обсудить – создание виртуальных дисков. К примеру, у тебя появился диск с полезной инфой или игрой, но диск надо отдавать :( Конечно в твоем вооружении, наверняка, давно уже есть надежный ВКД(Виртуальный Компакт-Диск). Я пользуюсь двумя виртуалками: 'NeroImageDrive' и 'Paragon CD-ROM Emulator'. Последний я уважаю за простату и способность к сжатию инфы (а скорость работы остается на уровне:) А Nero я использую в том случае, если мне необходимо нарезать диск на балванку и на компе его сохранить. Все достаточно просто. Но иногда появляется нужда (не пойми неправильно:) создать временный диск, например, когда у тебя есть какая-нибудь база данных, которую просто необходимо запускать из корневой директории. Или написав свою программу, хочешь её на диск нарезать с автозапуском, дак вот чтобы проверь как она себя будет вести – создаешь диск и видишь нормально ли функционирует автозапуск, все ли ссылки работают как надо.

Приступим, собственно говоря, к программированию. Я надеюсь, ты знаком с языком программирования Delphi, писать прогу будем именно на нем, т.к. считаю его достойным средством разработки программного обеспечения.

Утилита subst.exe
В нашей программе мы будем применять возможности утилиты subst.exe, которая входит в состав Windows. Ее используют следующим образом, набери в командной строке “subst z: c:\Temp” – и в "Моем компьютере" появится диск z, который будет указывать на c:\Temp. Чтобы удалить диск, введи "subst z: /D". Вот и все что тебе необходимо знать для работы с виртуальными дисками. Главное пойми: информация не копируется диск просто ссылается на указанный тобой путь.

Сегодня мы создадим интерфейс (GUI – Graphical User Interface, графический интерфейс пользователя), для того чтобы было удобно пользоваться утилитой subst.

Запускай Delphi, создавай новое приложение: File->New->Application, обязательно сохрани!: File->Save All. Назначь значение свойства Caption формы равным GUI_for_subst, это название нашей проги, свойство BorderStyle сделай равным bsSingle, чтобы нельзя было изменять размеры окна.

Затем скидывай себе на форму следующие объекты с палитры компонентов (Component Palette):
TGroupBox из вкладки Standard, размести в нем два TLabel, две TButton, один TEdit и один TComboBox. В объектном инспекторе измени свойства у этих объектов:

GroupBox1.Caption:=’Создание нового ВКД’
Label1.Caption:=’Путь:’
Label1.Text:=’C:\’
Label2.Caption:=’Диск:’
Button1.Caption:=’Обзор’
Button2.Caption:=’Создать’

Теперь у ComboBox1 измени свойство Items, для этого в объектном инспекторе щелкни напротив Items на многоточие, в появившемся окне напиши все латинские буквы в обратном порядке:
Z:
Y:
X:

F:
Все, т.е. от Z до F, тем самым ты создал список из этих букв, ими будем обозначать диски.

Теперь создай второй TGroupBox помести в нем TLabel, TComboBox, TButton и изменяй свойства:
Label3.Caption:=’Диск:’
Button3.Caption:=’Удалить’
GroupBox2.Caption:=’Удаление ВКД’
А Items у ComboBox2 заполни также как у ComboBox1.
ComboBox1.ItemIndex:=0
ComboBox2.ItemIndex:=0

Создавай еще один TGroupBox, в котором помести TShellListView, который находится во вкладке Samples. Щелкни два раза на TShellListView и выбери директорию по умолчанию (Use Standard Folder->rfMyComputer).

Теперь размести на форме TGroupBox и помести в него TShellTreeView и две кнопки. Измени свойства новых объектов:
GroupBox3.Caption:=’Текущая конфигурация’
ShellListView1.ViewStyle:=vsList
GroupBox4.Caption:=’Обзор’
GroupBox4.Visible:=False
ShellTreeView1.Root:=rfMyComputer // аналогично тому, что ты сделал с ShellListView1 только другой способ
Button4.Caption:=’Ok’
Button5.Caption:=’Отмена’

ВСЁ! С интерфейсом мы закончили, если ты все правильно сделал, то должен получить что-то вроде этого:



Отдохни немного, и переходи к коду нашей проги.

1. Объявление переменных
Если ты программировал хотя бы на Basic'е, то ты знаешь, что такое переменные и где их используют. В Delphi их объявляют в разделе var (variables – переменные), который находится перед implementation (выполнение).

У тебя должно получится так:
var
Form1: TForm1;
fcreat,fdel:TextFile;//для работы с файлами
st:string;// переменная типа строка
s: array [0..255] of char; //объявляем переменную s типа массив символов

Допиши в разделе uses библиотеку ShellApi, она необходима для работы функции ShellExecute, которая служит для запуска файлов

2. Создание ВКД
Создай обработчик события OnClick кнопки 'Создать', впиши туда следующий код:

//Связываем файловую переменную fcreat с файлом 'creat.bat', если файла нет, он создается автоматически
AssignFile(fcreat,'creat.bat');
//Открываем файл для записи
rewrite(fcreat);
//Прописываем команду, создающую ВКД
st:='subst '+ComboBox1.Text+' ' + '"'+Edit1.Text+'"';
//Перекодируем текст в DOS-кодировку, иначе работать с русскими названиями не будет :(
CharToOem(PChar(st),s);
st:=s;// использование промежуточной переменной обязательно!
//Записываем значение st в файл fcreat
Write(fcreat,st);
//Закрываем файл fcreat
CloseFile(fcreat);
//Запускаем созданный нами файл
ShellExecute(Handle,nil,'creat.bat','','',SW_HIDE);
//Ждем полсекунды
sleep(500);
//Обновляем поле с дисками
ShellListView1.Refresh;


3. Удаление ВКД
Также создавай ответ на щелчок кнопки 'Удалить' и пиши код:
//Связываем файловую переменную fdel с файлом 'del.bat'
AssignFile(fdel,'del.bat');
//Открываем файл для записи
rewrite(fdel);
//Прописываем команду, удаляющую ВКД
st:='subst '+ ComboBox2.Text+ ' /D';
//Записываем st в fdel
Write(fdel,st);
//Закрываем файл
CloseFile(fdel);
//Запускаем файл
ShellExecute(Handle,nil,'del.bat','','',SW_HIDE);
sleep(500);
ShellListView1.Refresh;


4. Еще несколько событий
На событие OnClick у Button1:
//Делаем обзор видимым
GroupBox4.Visible:=true;

На событие OnClick у Button4:
//Прописываем путь
edit1.Text:=ShellTreeView1.Path;
GroupBox4.Visible:=false;

На событие OnClick у Button5:
//Делаем обзор невидимым
GroupBox4.Visible:=false;

На событие Exit y GroupBox4:
//Делаем обзор невидимым
GroupBox4.Visible:=false;

Теперь программа полностью готова! Можешь смело запускать и создавать диски, и помни: они исчезают после перезапуска системы, так что не теряй их. Если не все понятно, то смотри исходники, главное, чтобы у тебя все получилось, а понимание придет со временем.

Исходники бери здесь.
Удачи и до встречи!


Madin


Поиск по сайту
Яндекс
Используются технологии uCoz