Показать сообщение отдельно
Старый 06.10.2007, 14:21   #1
Ваня1993
AnyKey`щик
 
Регистрация: 29.08.2007
Сообщений: 13
Написано 0 полезных сообщений
(для 0 пользователей)
Файловый Менеджер

Вот пример простого файлового менеджера. Подскажите как мне сделать чтбы для каждого файла была своя иконка(например для дисков своя, а для папок своя)
program PuntoExplorer;

uses fsafm;


var

// команды
cmdNext : command;
cmdBack : command;
cmdQuit : command;
clicked : command;

str : string; // буфер
files: array[1..200] of string; // имена файлов, коичество файлов = размер массива
filesID: array[1..200] of integer; // ID строк
nameT : string; // текущая папка

i, num : integer; // щечики
iID : integer;
nfile : string;







begin


cmdNext := CreateCommand('ок', CM_OK, 1);
cmdBack := CreateCommand('выход', CM_EXIT, 1);

nameT:= ''; // начальная папка

while (clicked <> cmdBack) do
begin
// очищаем команды
removeCommand(cmdNext);
removeCommand(cmdBack);
Repaint; // обновление экрана



if nameT = '' then // проверка на нахождение в корне
begin


str:=fsafm.list_roots(''); // чтение дисков
num:= fsafm.num_disk(nameT); // определяем кол-во дисков



end
else
begin


str:=fsafm.list_(nameT); // чтение папок
num:= fsafm.num_dir(nameT); // определяем кол-во папок

end;

files [1]:= '..'; // добавляем первой строкой, выполняет функцию вверх



if str <> '' then // проверка наличия файлов
begin



for i:=2 to num + 1 do // очистка меню
begin
files [i]:= ''
end;


for i:=2 to num + 1 do
begin


files [i]:= copy(str, 0, pos(str, '|') ); //заполнение массива именами
str:= copy(str, pos(str, '|') + 1 , length(str));

if pos(str, '|') = -1 then // проверка знака '|' в строке
begin
str:= '.';
break;
end;

end;
end;




// создаем меню



showMenu(nameT, CH_IMPLICIT);

for i:= 1 to num + 1 do
begin
if files[i] <> '' then
begin
filesID [i] := menuAppendStringImage(files[i], loadImage('/folder.png')); // создаем строки
end;
end;


// добавление команд
AddCommand(cmdNext);
AddCommand(cmdBack);
Repaint; // обновление экрана



repeat // ждем нажатия на команду
delay(100);
clicked:= getClickedCommand;
until clicked <> emptyCommand;

if clicked <> cmdBack then
begin

iID:= menuGetSelectedIndex + 1; // к ID выбранной строки прибавим 1, для удобства

if iID=1 then // если первая строка, переходим вверх
begin
if Length(nameT) <= 3 then // проверка на нахождение в корне
begin
nameT:='';
end
else
begin

for i:= 2 to length(nameT) do // команда вверх, вычисление предидущей папки
begin

if copy(nameT, length(nameT) - i, length(nameT) - i + 1 ) = '/' then
begin

nameT:= copy(nameT, 0, length(nameT) - i + 1 );
break;

end;
end;
end;
end
else
begin


if copy(files[iID], length(files[iID]) - 1, length(files[iID])) = '/' then nameT:= nameT + files[iID]; // если выбрана папка переходим в нее

if length(files[iID]) >= 4 then
begin
if copy(files[iID], length(files[iID]) - 4, length(files[iID])) = '.gif' then debug('gif'); // проверка выбранного файла по расширению
end;
end;






end;

end;
end.
(Offline)
 
Ответить с цитированием