![]() |
Файловый Менеджер
Вот пример простого файлового менеджера. Подскажите как мне сделать чтбы для каждого файла была своя иконка(например для дисков своя, а для папок своя)
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. |
Re: Файловый Менеджер
Я не совсем понял смысл вопроса :(
Когда ты получаешь список дисков, то ты знаешь, что иконка должна быть дисков, когда папок, то папок. Точно также можно по расширениям файлов и им иконки выбирать. Ведь ты используешь для этого разные функции. |
Re: Файловый Менеджер
Для них одна и та же функция.
filesID [i] := menuAppendStringImage(files[i], loadImage('/folder.png')); // создаем строки И на дисках, и на папках одна и та же иконка. |
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]; // если выбрана папка переходим в нее если мы тут определяем, что это папка, то можем и иконку определить точно также. Может я не прав? Не стоит перекладывать алгоритмические вопросы на других, поверьте полезнее и интереснее их решить самому |
Re: Файловый Менеджер
Кстати, лучше реализовывать всё через графику, а не через формы. А то с формами слишком много проблем. Они на разных телефонах отображаются по-разному. Да и с командными кнопками слишком много проблем.
|
Часовой пояс GMT +4, время: 11:59. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot