forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Основной форум (http://forum.boolean.name/forumdisplay.php?f=49)
-   -   Файловый Менеджер (http://forum.boolean.name/showthread.php?t=4669)

Ваня1993 06.10.2007 14:21

Файловый Менеджер
 
Вот пример простого файлового менеджера. Подскажите как мне сделать чтбы для каждого файла была своя иконка(например для дисков своя, а для папок своя)
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.

Piligrim 06.10.2007 17:44

Re: Файловый Менеджер
 
Я не совсем понял смысл вопроса :(
Когда ты получаешь список дисков, то ты знаешь, что иконка должна быть дисков, когда папок, то папок.
Точно также можно по расширениям файлов и им иконки выбирать.
Ведь ты используешь для этого разные функции.

Ваня1993 06.10.2007 23:45

Re: Файловый Менеджер
 
Для них одна и та же функция.
filesID [i] := menuAppendStringImage(files[i], loadImage('/folder.png')); // создаем строки
И на дисках, и на папках одна и та же иконка.

Piligrim 07.10.2007 02:05

Re: Файловый Менеджер
 
str:=fsafm.list_roots(''); // чтение дисков

str:=fsafm.list_(nameT); // чтение папок

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

Может я не прав? Не стоит перекладывать алгоритмические вопросы на других, поверьте полезнее и интереснее их решить самому

odd 08.10.2007 08:21

Re: Файловый Менеджер
 
Кстати, лучше реализовывать всё через графику, а не через формы. А то с формами слишком много проблем. Они на разных телефонах отображаются по-разному. Да и с командными кнопками слишком много проблем.


Часовой пояс GMT +4, время: 11:59.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot