Показать сообщение отдельно
Старый 23.05.2011, 12:25   #28
alexprey
ПроЭктировщик
 
Регистрация: 22.10.2010
Сообщений: 196
Написано 16 полезных сообщений
(для 30 пользователей)
Ответ: File Manager и ОС

И так. Краткий курс по созданию ФС. Рассмотрю только как получить список дисков, как их правильно нарисовать, и как перейти к сл. папке.
1. Получаем список каталогов, диков
unit FS;
interface
function 
GetListstring;
procedure GetRoots;
procedure GetDirs(addbooleanpathstring);
procedure GetFiles(addbooleanpathstring);
implementation
uses jsr75i
;
var list: 
stringсписок файлов будем заносить сюда
//Для того, чтобы её нельзя было изменить из внешнего модуля сделаем эту переменную только для чтения
function GetListstring;
begin
 GetList
:= list;
endfunction
//Теперь получим список дисков
procedure GetRoots;
begin
 
list:= jsr75i.get_roots;
end;
//А тут получим список папок
procedure GetDirs(addbooleanpathstring);
//add - добавить это в list или записать по новой
//path - путь
begin
 
if add then
  
list:= list+jsr75i.get_dirs(path)
 else
 list:= 
jsr75i.get_dirs(path);
end;
//Список файлов
procedure GetFiles(addbooleanpathstring);
//параметры аналогичны GetDirs
begin
 
if add then
  
list:= list+jsr75i.get_files(path)
 else 
  list:= 
jsr75i.get_files(path);
end
2 теперь как нам нарисовать это все.
...
uses parse {самое главное},fs;//наш модуль
...
procedure RenderItem(itemstringx,yinteger);
begin
 
//тут рисуем конкретный айтем. Например
 //item - имя файла, папки, диска
 
drawText(item);
end;

procedure RenderPath(pathstring);
 var 
iinteger;
      list: 
string;
begin
 
//Получим список нужных элементов
 //если path = :: значит мы будем получать список дисков, иначе список файлов и папок
 
if path '::' then fs.GetRoots else
 
begin
  fs
.GetDirs(false,path);
  
fs.GetFiles(true,path);
 
end;
 list:= 
fs.GetList;
 
//Теперь надо разбить на элементы массива
 
parse.clear;
 
parse.line(list,'|');
 
//Теперь можно рисовать
 
for i:= 0 to parse.len-do
  
RenderItem(parse.Get(i),5,i*15+5); //Заместо 5,i*15+5 указываешь нужный закон для указания координат. Здесь просто выводиться в столбик
end
Ну вот и все =)
Ещё советую завести переменную для хранения текущего пути. И во время перехода к сл. папке просто прибавляй название папки к текущему пути и заного вызывай процедуру рендера.
__________________
Для меня нет ничего не реального в кодинге, но мне лень
gainOS - прорыв в проектировании ОС на MIDlet Pascal
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Rock2roll (23.05.2011)