Пометка записей Назад В начало Вперед

Для автоматизации пометки записей в табличном редакторе используется конструкция <маркер>:

<маркер> = recMarker [ : <вычисляемое-выражение> ]
  [ = <обьект-маркер> ] [ {<поле-маркера>} ]
  [ noColumn | noColor ] [ noSave ] ;

<вычисляемое-выражение> - позволяет прикладному программисту самому создать структуру для хранения не только первичных ключей выделенных записей, но и любой дополнительной информации.

В этом случае программист сам должен позаботиться о наложении и снятии bounds и создавать маркеры посредством функции InitMarker. Соответственно, в этом случае ему придется самому обрабатывать события cmMarkRecord и cmUnmarkRecord.

Само <вычисляемое-выражение> должно возвращать значение типа string и содержать имя bitmap из ресурса или пустую строку, если данную запись в броузере помечать не надо.

При использовании опции <вычисляемое-выражение> атрибуты noColumn, noColor и noSave не используются.

<обьект-маркер> - позволяет управлять пометкой записей в броузере с использованием обьектно-ориентированных возможностей языка VIP. Для этого в Атлантис введен Объектный интерфейс IMarker.

<поле-маркера> - позволяет переопределить поле по которому ведется пометка.При этом происходит автоматическое приведение этого поля к типу comp. По умолчанию пометка ведется по полю NRec.

Возможность переопределить поле доступна начиная с Атлантис 5.1.25.

noColumn - колонка маркера создается невидимой.

noColor - помеченные записи не выделяются другим цветом.

noSave - информация о помеченных записях не сохраняется в конфигурации пользователя. Опция устарела, недоступна начиная с Атлантис 5.1.36.

Ключевые слова noColumn и noColor нельзя использовать одновременно.

При использования выражения recMarker без задания опции <вычисляемое-выражение> в системе VIP становятся доступны два переключаемых реляционных отношения под следующими именами:

Где <имя> - имя таблицы, корневой для данного браузера.

Первый bounds автоматически накладывается при открытии окна. Если есть необходимость обработать только выделенные записи, то необходимо снять первый bounds (функцией SubBounds) и установить второй. И соответственно после обработки выделенных записей снять второй и установить первый (функцией AddBounds) bounds.

До Атлантис 5.2.02 в связи с особенностями образования имен баундов нельзя использовать в одном интерфейсе два броузера с автоматизированной пометкой по одной таблице.

Начиная с Атлантис 5.2.02 допускается использовать в одном интерфейсе несколько броузеров /деревьев с автоматизированной пометкой по одной таблице при явном указании обьекта маркера (маркеры вида RecMarker = pMarker).

Для использования опции <обьект-маркер> необходимо в секции глобальных переменных интерфейса обьявить переменную типа ссылки на объектный интерфейс IMarker. Переменная инициализируется ссылкой на индивидуальный экземпляр интерфейса. В Атлантис имеется интерфейс marker с реализацией базового функционала пометки.

После этого можно вызывать методы и устанавливать свойства интерфейса как для обычных объектов.

Пример

#include marker.vih // описание объекта и объявление интерфейса
					// marker c реализацией по умолчанию
.....
var  
  pMarker: IMarker(marker) new; //Интерфейс должен быть не разделяемым

Описание пометки в многотабличном дереве имеет особенности. Подробнее см. описание конструкции <маркер> в разделе "Редактор иерархических структур. ". Описание пометки в однотабличном дереве ничем не отличается от описания пометки в браузере.

Прохождение сообщений о пометки

При наличии в статус-лайне команд пометки или броузера с автоматизированной пометкой, в системный тулбар автоматически добавляются четыре кнопки пометки.

Если в статус-лайне присутствуют команды пометки, то сообщение о пометке приходит на прикладной уровень. Если в интерфейсе присутствует броузер с автоматизированной пометкой то после этого вызывается соответствующий метод пометки обьекта.

Если в статус-лайне нет команд пометки и присутствует броузер с автоматизированной пометкой, то при фокусе ввода на этом броузере методы пометки обьекта вызываются непосредственно от клавиш:

Если в статус-лайне присутствует команда cmDelete и фокус ввода находится на броузере с автоматизированной пометкой, то по этой команде происходит удаление помеченных записей. Если в статус-лайне команда cmDelete отсутствует, удаление по F8 не производится.

В любом случае при обработке команды пометки из системного тулбара сообщение о пометке приходит на прикладной уровень, а затем, если в интерфейсе присутствует сфокусированный броузер с автоматизированной пометкой, вызывается соответствующий метод пометки обьекта.

Начиная с Атлантис 5.1.21 при обработке пометки записи вместо последовательности операторов:

cmMarkRec :
{
  ...  // запомнить пометку и т.д.
  if (GetNext MyTable = tsOk) // перейти на след. запись
	CallToNeighbours(cmPosDown, tnMyTable); // сообщить соседям
  RescanPanel(tnMyTable); // обновить панель
}

нужно использовать:

cmMarkRec :
{
  ...
  RedrawCurrentAndGo (GetCurrentFormat, true);
}

При этом получаем выигрыш по времени в несколько раз!

Пример

//=========================================================
#include marker.vih

//=========================================================
interface MarkerDemo 'Использование маркеров.';

//---------------------------------------------------------
var
  pMarker   : IMarker(marker) new;

//---------------------------------------------------------
create view

as select
  *

from
  x$files
;

//-----------------------------------------------------------------------------
browse brwBrowse1;
  table x$files;
  recMarker = pMarker {x$files.xf$code};

fields
  x$files.xf$name 'File name' ('File name') : [20], protect;
end;

//---------------------------------------------------------
handleEvent

cmInit:
{
  pMarker.Caption := (' Отмечено [%d] записей.'); // для заголовка
}

end;  // handleEvent interface

end.

Смотрите также

Описание табличного редактора.

Функции пометки (маркеры).

Функция RedrawCurrentAndGo

Версия

Начиная с Атлантис 5.2.02 допускается использовать в одном интерфейсе несколько броузеров /деревьев с автоматизированной пометкой по одной таблице.

Начиная с Атлантис 5.1.36 запрещено использование опции noSave.

Начиная с Атлантис 5.1.25 добавлена возможность переопределить поле маркера, по которому ведется пометка (конструкция {<поле-маркера>}).

Начиная с Атлантис 5.1.21 доступна функция RedrawCurrentAndGo для прорисовки текущей записи и перемещения на следующую /предыдущую запись в броузере или дереве при обработке пометки записи.

Начиная с Атлантис 5.1.15 введена конструкция <обьект-маркер>.

Оглавление раздела

Объектный интерфейс IMarker

Процедура DeleteRec

Процедура ExportToName

Процедура ImportFromName

Процедура MarkUnMarkRec

Процедура MarkUnMark

Процедура Mark

Процедура UnMark

Процедура UnselectAll

Процедура SelectAll

Процедура InvertSel

Процедура ImportFrom

Процедура ExportTo

Процедура StoreToDsk

Процедура LoadFromDsk

Пример работы с пометками