# Свойства и функции для работы с панелями

Под "панелями" понимаются следующие области: файловые панели (`Shell`), информационная панель (`Info`), панель быстрого просмотра (`QView`), панель дерева папок (`Tree`).

Все плагиновые панели относятся к файловым (`Shell`).

## Логические свойства (тип: Boolean)

Файловые панели
Свойство | Описание
--- | ---
APanel.Root PPanel.Root | на панели корневая папка?
APanel.Bof PPanel.Bof | текущий элемент панели в начале списка?
APanel.Eof PPanel.Eof | текущий элемент панели в конце списка?
APanel.Empty PPanel.Empty | панель пуста?
APanel.Selected PPanel.Selected | на панели есть отмеченные файлы/папки?
APanel.Folder PPanel.Folder | текущий элемент панели - папка?
APanel.LFN PPanel.LFN | на панели "длинные имена файлов"?
APanel.Filter PPanel.Filter | на панели включён фильтр?
APanel.Plugin PPanel.Plugin | плагиновая панель?
Все панели
Свойство | Описание
APanel.FilePanel PPanel.FilePanel | файловая панель?
APanel.Left PPanel.Left | панель слева?
APanel.Visible PPanel.Visible | панель видима?

### Замечания

Префикс APanel. относится к активной панели, PPanel. - к пассивной.

## Свойства

Файловые панели
Оператор | Тип | Описание
--- | --- | ---
APanel.ColumnCount PPanel.ColumnCount | Number | количество колонок на панели
APanel.ItemCount PPanel.ItemCount | Number | содержит количество файловых объектов на панели
APanel.CurPos PPanel.CurPos | Number | содержит порядковый номер файлового объекта на панели
APanel.SelCount PPanel.SelCount | Number | содержит количество выделенных файлов на панели
APanel.Current PPanel.Current | String | содержит имя файла под курсором
APanel.Path PPanel.Path | String | содержит путь панели (без заключительного '\')
APanel.UNCPath PPanel.UNCPath | String | содержит UNC-путь панели (без заключительного '\'); для плагиновой панели - prefix:[hostfile/]path
APanel.DriveType PPanel.DriveType | Number | содержит тип привода на панели:
Значение | Описание
--- | ---
-1 | Плагиновая панель
0 | Не удалось определить тип привода
2 | Сменный привод
3 | Жёсткий диск
4 | Сетевой подмапленный диск
5 | CDROM
6 | Виртуальный диск
15 | SUBST-диск
Файловые панели плагинов
Оператор | Тип | Описание
APanel.Path0 PPanel.Path0 | String | содержит путь на реальной файловой системе, до вызова плагинов, создающих свою панель (без заключительного '\')
APanel.HostFile PPanel.HostFile | String | содержит имя хост-файла панели плагина (или пусто)
APanel.Prefix PPanel.Prefix | String | содержит префикс плагина или пусто (или несколько префиксов, разделённых символом ':')
APanel.Format PPanel.Format | String | содержит имя формата панели плагина
APanel.OPIFlags PPanel.OPIFlags | Number | набор битовых флагов, характеризующих свойства плагиновой панели:
Флаги | Описание
--- | ---
0x00000001 | используется фильтр на панели
0x00000002 | используются группы сортировки на панели
0x00000004 | используется раскраска файлов на панели
0x00000010 | папки на панели плагина выбираются независимо от настроек FAR
0x00000020 | используется стандартная обработка файла FAR'ом, если запрошенная операция не поддерживается плагином; если этот флаг указан, элементы на панели плагина являются именами реальных файлов
0x00000040 | показаны имена без путей
0x00000080 | имена файлов выровнены по правому краю
0x00000100 | имена файлов показаны в оригинальном регистре (независимо от настроек FAR)
Если панель не плагиновая, то значение будет = 0
Все панели
Оператор | Тип | Описание
APanel.Height PPanel.Height | Number | содержит высоту панели
APanel.Width PPanel.Width | Number | содержит ширину панели
APanel.Type PPanel.Type | Number | содержит тип панели:
Значение | Описание
--- | ---
0 | Файловая панель
1 | Дерево папок
2 | Панель быстрого просмотра
3 | Информационная панель

### Замечания

Префикс APanel. относится к активной панели, PPanel. - к пассивной.

## Функции

Функция | Описание
--- | ---
itemIdx=panel.fexist(panelType,S) | Проверяет существование файла/папки S из активной (panelType=0) или пассивной (panelType=1) панели. В параметре S допускается использование символов '*' и '?'. В этом случае функция проверяет только первое вхождение файла/папки. Функция возвращает 0, если такого объекта на панели нет, или индекс элемента. В отличие от fexist(), функция работает только с панелями.
b=panel.fattr(panelType,S) | Возвращает файловые атрибуты файла/папки S из активной (panelType=0) или пассивной (panelType=1) панели.
Атрибут | Описание
--- | ---
0x00000001 | FILE_ATTRIBUTE_READONLY. Файл только для чтения. Приложения могут читать такой файл, но не могут записывать или удалять его.
0x00000002 | FILE_ATTRIBUTE_HIDDEN. Файл скрыт. Такой файл не включается в обычный листинг папки.
0x00000004 | FILE_ATTRIBUTE_SYSTEM. Этот файл - часть операционной системы.
0x00000010 | FILE_ATTRIBUTE_DIRECTORY. Это папка.
0x00000020 | FILE_ATTRIBUTE_ARCHIVE. Это архивный файл. Приложения должны использовать этот флаг для копирования, архивирования или удаления.
0x00000080 | FILE_ATTRIBUTE_NORMAL. У этого файла не установлены другие атрибуты. Это значение корректно только при использовании без остальных флагов.
0x00000100 | FILE_ATTRIBUTE_TEMPORARY. Это временный файл. Приложения должны записывать в такой файл только в крайней необходимости. Большая часть данных файла находится в памяти и не сбрасывается на диск, так как файл будет удалён.
0x00000200 | FILE_ATTRIBUTE_SPARSE_FILE. Файл является разрежённым.
0x00000400 | FILE_ATTRIBUTE_REPARSE_POINT. Папка является точкой повторной обработки.
0x00000800 | FILE_ATTRIBUTE_COMPRESSED. Файл или папка сжаты. Для файла это означает, что все данные его сжаты, для папки - что компрессия по умолчанию применяется ко всем её файлам и подпапкам.
0x00001000 | FILE_ATTRIBUTE_OFFLINE. Данные файла не доступны непосредственно. Означает, что реальные данные файла были физически перемещены на устройства хранения.
0x00002000 | FILE_ATTRIBUTE_NOT_CONTENT_INDEXED. Этот файл или папки не будут индексироваться службой индексирования.
0x00004000 | FILE_ATTRIBUTE_ENCRYPTED. Файл или папка зашифрованы. Для файла это означает, что все данные в файле зашифрованы. Для папки это означает, что шифрование является умолчанием для вновь созданных файлов и подпапок.
0x00010000 | FILE_ATTRIBUTE_VIRTUAL. Этот файл - виртуальный файл.
Если файловый объект не существует, функция возвращает -1. В параметре S допускается использование символов масок '*' и '?'. В этом случае функция возвращает атрибуты для первого найденного файла/папки. В отличие от fattr(), функция работает только с панелями.
V=panel.item(panelType,itemIdx,Property) | Возвращает различную информацию для элемента панели itemIdx из активной (panelType=0) или пассивной (panelType=1) панели. В зависимости от запрашиваемого Property функция возвращает следующие свойства элемента:
Property | Тип | Описание свойства
--- | --- | ---
0 | String | Имя файла/папки
1 | String | Короткое имя
2 | Number | Файловые атрибуты
3 | String | Дата/время создания
15 | Number | Дата/время создания
4 | String | Дата/время последнего доступа
16 | Number | Дата/время последнего доступа
5 | String | Дата/время модификации
17 | Number | Дата/время модификации
20 | String | Дата/время последнего изменения
21 | Number | Дата/время последнего изменения
6 | Number | Размер
7 | Number | Выделенный размер
8 | Number | "Выделен?"
9 | Number | Количество линков
10 | Number | SortGroup
11 | String | Diz-текст
12 | String | Владелец
13 | Number | CRC32
14 | Number | Позиция элемента в процессе чтения файловой системы
18 | Number | Количество потоков
19 | Number | Размер потоков
22 | Var | Значение Custom-колонки
23 | Number | Значение ReparseTag (актуально только для ссылок)
Для панели "Дерево папок" возвращается только имя файла (Property=0), остальные значения Property игнорируются. Для получения данных о текущем элементе (под курсором) itemIdx должен быть равен 0. Дата/время могут возвращаться в форматах: как строка вида `DD.MM.YYYY HH:MM:SS`. Разделители и порядок в дате зависят от региональных настроек. как 64-разрядное число. В старших 32-х битах - дата, в младших - время. Пример - выделить все файлы/папки новее текущего:
    %d=Panel.Item(0,0,16);
    %i=1;
    $while (%i<=APanel.ItemCount)
      $If (panel.item(0,%i,16) > %d)
        panel.select(0,1,1,%i)
      $End
      %i=%i+1;
    $End
E=panel.setpath(panelType,path[,filename]) | На активной (panelType=0) или пассивной (panelType=1) панели выставляет путь path и позиционирует курсор на элемент с именем filename (если указан). Возвращает 1 в случае успешной установки пути, и 0, если папка не существует. Например, на активной панели выставить папку "C:\WINDOWS", на пассивной - "C:\Program Files", активную панель сделать слева и установить курсор на папку "FAR":
    $if(APanel.Left) CtrlU $End
    panel.setpath(1,"C:\\WINDOWS")
    panel.setpath(0,"C:\\Program Files","FAR")
itemIdx=panel.setpos(panelType,filename) | Позиционирует курсор на элемент с именем filename на активной (panelType=0) или пассивной (panelType=1) панели. Возвращает позицию (индекс) элемента или 0, если такого элемента на панели нет. Например, создать папку с именем, соответствующим текущей дате в формате `YYYYMMDD`, если папка существует - позиционировать на неё курсор:
    %dt=date("%Y%m0%d");
    $If (fexist(%dt))
      panel.setpos(0,%dt)
    $Else
      F7 print(%dt) Enter
    $End
itemIdx=panel.setposidx(panelType,PosIdx[,InSelection]) | Позиционирует курсор на элемент с индексом itemIdx на активной (panelType=0) или пассивной (panelType=1) панели. Параметр PosIdx может принимать отрицательные значения, в этом случае элементы панели нумеруются от конца к началу. Если задать itemIdx=0, то перехода не происходит, просто возвращается текущая позиция. С помощью необязательного параметр InSelection можно осуществить позиционирование среди отмеченных элементов (для этого нужно указать InSelection=1). Функция возвращает позицию элемента или 0, если такого элемента на панели нет.
N=panel.select(panelType,Action[,Mode[,Items]]) | Операции с выделением элементов на активной (panelType=0) или пассивной (panelType=1) панели. Action может быть одним из следующих значений:
Action | Описание
--- | ---
0 | снять выделение
1 | выделить
2 | инвертировать выделение
3 | восстановить выделение (аналог `Ctrl`+`M`). Возвращает количество восстановленных элементов.
Необязательный параметр Mode может принимать следующие значения:
Mode | Тип Items | Описание
--- | --- | ---
0 / или не указан | - | выполнить действие Action для всех элементов, параметр Items игнорируется
1 | Number | Выполнить действие Action для элемента с индексом Items. Items является числом - индексом элемента панели. Если Items = 0 (или отсутствует) - выполнить действие Action для текущего элемента.
2 | String | Выполнить действие Action для элементов, указанных в Items. Items является строкой - списком имён файловых объектов (возможно с полными путями).
3 | String | Выполнить действие Action для элементов, подходящих под маски, указанные в Items. Items является строкой - списком файловых масок.
| Для строковых значений Items: Элементы должны быть разделены с помощью `Lf` ("\n") или `CrLf` ("\r\n"). Имена должны быть в двойных кавычках. В случае если Items равно "" (или отсутствует) - действие не выполняется.
Функция возвращает количество элементов, над которыми производилось Action. Примеры: `Panel.Select(0,0)` полное снятие выделения `Panel.Select(0,1)` выделить все элементы `Panel.Select(0,2)` инверсия всего `Panel.Select(0,2,1)` инверсия того, что под курсором `Panel.Select(0,1,1,10)` "вдогонку" выделить 10-й элемент панели `Panel.Select(0,0,3)` ничего не делать `Panel.Select(0,1,2,clip(0))` выделить элементы, имена которых содержатся в буфере обмена

### Замечания

1. Панельные функции работают только с видимыми файловыми элементами, с учётом применённых фильтров на панели.
2. Нумерация элементов начинается с 1.

3. Во время вызова макрофункций panel.setpos(), panel.setpath() и panel.setposidx() макросы замораживаются до момента выполнения этих функций.

   На "больших" папках (например, сетевые, с большим количеством файловых объектов и/или медленных каналах) эти функции могут выводить сообщения о процессе сбора данных о файлах/папках, с возможностью отменить процесс по `Esc`.

Смотрите также:
Примеры