Приветствую Вас Гость | RSS

Меню сайта

Реклама

Категории раздела
CD-ROM [11]
DLL и PlugIns [75]
Help файлы [20]
INI файлы [16]
RS232 [2]
Активные директории [1]
Директории [0]
Диски [0]
Корзина [5]
Порты [26]
Ресурсы [0]
Файлы [0]
Форматы файлов [15]
Ярлыки [0]

Наш опрос
Есть ли у Вас свой сайт?
Всего ответов: 48

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Форма входа

Главная » Статьи » Файловая система » CD-ROM

Программа показа инфо о CD-R

На форме Form1 размещаем элементы: ListBox1 (категория), ListBox2 (список программ), RichEdit1 (описание программы), BitBtn1 (запуск/инсталляция), BitBtn2 (выход), BitBtn3 (О программе), Label1 (объясню позже). Вместо TBitBtn можно использовать TButton. Теперь щелкаем по форме, в инспекторе объектов Object Inspector выбираем закладку Events (события) и, дважды кликнув по полю открывающегося списка, получаем в исходном тексте заготовку: procedure TForm1.FormActivate(Sender: TObject). Тут-то мы и начнем писать свой код:

var // здесь размещаются переменные, которые будут доступны из всех процедур
 RunPathList: array[1..999] of string; // список путей к запускаемым файлам
 DescriptionList: array[1..999] of string;
 // список описаний или пути к описаниям
 ListFile: array[1..99] of string; // список файлов с информацией
 Path: string; // корневой каталог диска

procedure TForm1.FormActivate(Sender: TObject); // сама процедура
var // тут размещаются переменные, которые будут доступны в пределах этой процедуры
 i, n, k, Found: integer; // различные переменные счетчиков
 SearchRec: TSearchRec; // переменная, используемая при поиске
 ini: TIniFile; // готовимся к работе с .ini-файлами
 Category, Name, Description, RunPath: string; // думаю, ясно из названий
begin
 label1.Caption := '0'; // тут будет количество найденных программ
 Path := ParamStr(0);
 // ParamStr(n), где n0. При n=0 возвращает путь и имя файла к нашей запущенной программе. При n>0
 возвращает параметры, которые были переданы программе при запуске(например:
 autorun.exe / param1 name).Функция ParamCount
 возвращает количество параметров, разделенных пробелом(т.е.n =
 0...ParamCount)
 Path := Path[1] + ':\';
 // выделяем логический диск. Это первый символ. К нему добавляем приставку :\
 i := 1;
 Found := FindFirst(Path + 'list??.ini', faVolumeID, SearchRec);
 // поиск первого файла по маске х:\list??.ini
 while Found = 0 do // зацикливаемся, пока есть новые файлы
 begin
 if FileExists(Path + SearchRec.Name) = true then
 // проверяем, что найден файл
 begin
 ListFile[i] := Path + SearchRec.Name;
 // добавляем найденныйй файл в список
 Inc(i); // увеличиваем переменную ? на единицу
 end;
 Found := FindNext(SearchRec); // выполняем поиск следующего файла
 end;
 FindClose(SearchRec); // освобождаем память которую занимает SearchRec
 ListFile[i] := 'END';
 // добавляем текст END в список файлов. Это затем, чтобы потом быстро определить конец списка
 if ListFile[1] = 'END' then
 ShowMessage('На диске ' + Path +
 ' не найдено ни одного конфигурационного файла.'); // если в
 первой строчке списка значится
end, значит, не найдено ни одного файла.В траурной рамочке выводим сообщение
k := 1;
for i := 1 to 99 do // перебираем список от 1 до 99 в цикле:
begin
 if ListFile[i] = 'END' then
 Break; //:пока не встретим END
 ini := TIniFile.Create(ListFile[i]); //открываем файл
 label1.Caption := IntToStr(StrToInt(label1.Caption) + ini.ReadInteger('MAIN',
 'ProgramsCount', 0)); // увеличиваем общее
 число программ
 for n := 1 to ini.ReadInteger('MAIN', 'ProgramsCount', 0) do
 // Перебираем все записи от 1 до значения ProgramsCount,
 указаного в файле
 begin
 Category := ini.ReadString('Program' + Format('%.3d', [n]), 'Category',
 'без категории'); // Считываем категорию. Функцией
 Format в данном случае задается формат чисел типа: 001, 002, 003...
 if ListBox1.Items.IndexOf(Category) = -1 then
 // выполняем поиск такой же категории среди уже находящейся в списке
 ListBox1.В случае удачи функция возвращает номер позиции, в противном
 случае - 1
 begin
 ListBox1.Items.Add(Category); // если нету - добавляем
 end;
 end;
end;
ini.Free;
label1.Caption := 'На этом диске ' + label1.Caption + ' программ(а).';
// делаем надпись более информативной для пользователя
end;

Следующим нашим шагом будет заполнение списка программ выбранной пользователем категории. Двойным щелчком мыши по ListBox1 получаем заготовку и заполняем ее:

procedure TForm1.ListBox1Click(Sender: TObject);
var
 ini: TIniFile;
 i, n, k: integer;
 Category: string;
begin
 k := 1;
 ListBox2.Items.Clear;
 RichEdit1.Text := ;
 Label1.Caption := ;
 for i := 1 to 99 do
 begin
 if ListFile[i] =
 end then Break;
 ini := TIniFile.Create(ListFile[i]);
 for n := 1 to ini.ReadInteger(MAIN, ProgramsCount, 0) do
 begin
 Category := ini.ReadString(program + Format(%.3 d, [n]), Category, без
 категории);
 if Category = ListBox1.Items.Strings[ListBox1.ItemIndex] then
 begin
 ListBox2.Items.Add(ini.ReadString(program + Format(%.3 d, [n]), Name, без
 имени));
 RunPathList[k] := Path + ini.ReadString(program + Format(%.3 d, [n]),
 Path, неизвестно);
 DescriptionList[k]
 := ini.ReadString(program + Format(%.3 d, [n]), Description, По одному
 названию все ясно!);
 Inc(k);
 end;
 end;
end;
ini.Free;
end;

Когда пользователь выберет программу, щелкнув по ней, нужно вывести ее описание и подготовить путь для запуска. Этим займется следующая процедура:

procedure TForm1.ListBox2Click(Sender: TObject);
var
 n: integer;
begin
 screen.Cursor := crHourGlass;
 Label1.Caption := RunPathList[ListBox2.ItemIndex + 1];
 if
 FileExists(Path + DescriptionList[ListBox2.ItemIndex + 1]) then
 RichEdit1.Lines.LoadFromFile(Path + DescriptionList[ListBox2.ItemIndex + 1])
 else
 RichEdit1.Text := DescriptionList[ListBox2.ItemIndex + 1];
 screen.Cursor := crDefault;
end;

Теперь, когда все готово к запуску, пользователь может нажать кнопку BitBtn1 и запустить программу:

procedure TForm1.BitBtn1Click(Sender: TObject);
var
 Result: Integer;
begin
 Result := Windows.WinExec(PChar(Label1.caption), SW_SHOWDEFAULT);
 if Result = 0 then
 MessageDlg(Недостаточно ресурсов для
 запуска программы, mtError, [mbOk], 0);
 if Result = ERROR_BAD_FORMAT then
 MessageDlg(Неправильный формат.ЕХЕ файла, mtError, [mbOk], 0);
 if Result = ERROR_FILE_NOT_FOUND then
 MessageDlg(Файл не найден#13#10+Label1.Caption, mtError, [mbOk], 0);
 if Result = ERROR_PATH_NOT_FOUND then
 MessageDlg(Неверный указанный путь#13#10+Label1.Caption, mtError, [mbOk],
 0);
end;

Теперь о самом конфигурационном файле. Он должен иметь имя list??.ini, где ?? - это номер от 01 до 99. Обратите внимание: числа от 1 до 9 имеют <незначащий> ноль. Структура файла соответствует стандартной для .ini-файла. В разделе [MAIN] конфигурационного файла параметр ProgramsCount указывает на количество программ в этом файле. Каждая программа располагается в своем разделе с уникальным трехзначным номером (от 001 до 999) в формате [Program???]. Вот пример файла для нашей программы:

 [MAIN] 
 ProgramsCount=3 
 [Program001] 
 Category="Категория" 
 Name="Название программы" 
 Description="Описание программы, или путь к описанию" 
 Path="путь к программе\имя файла.exe" 
 [Program002] 
 Category="Мои программы" 
 Name="Программа-меню для компакт-дисков" 
 Description="Описание моей программы" 
 Path="MyPrograms\autorun.exe" 
 [Program003] 
 Category="Мои программы" 
 Name="Моя лучшая программа" 
 Description="MyPrograms\readme.rtf" 
 Path="MyPrograms\MyProgram.exe" 

Когда вы вставляете уже записанный компакт-диск в CD/DVD-ROM, по умолчанию операционка начинает поиск файла autorun.inf в корневом каталоге диска. Содержимое этого файла напоминает структуру конфигурационного - думаю, назначение полей вам будет понятно Код:

 [autorun] 
 open=autorun.exe 
 icon=autorun.ico
Категория: CD-ROM | Добавил: Angel (06.07.2008)
Просмотров: 383 | Рейтинг: 0.0/0
  Delphi Lab   Главная   Регистрация   Вход  
Интересная Цитата

Поиск

Магазин


Copyright MyCorp © 2025 Хостинг от uCoz