Процедура RescanPanel

Приемы и подходы, обмен опытом

Модераторы: Screw, larin

Ответить
Аватара пользователя
Magic
топ-софт
Сообщения: 35
Зарегистрирован: Вт, 20/11/2007 10:30
Имя Фамилия: Роман Тищенко
Откуда: Галактика-Украина
Контактная информация:

Процедура RescanPanel

Сообщение Magic »

В документации по Атлантису (файл vipprogr.chm) приведено следующее описание процедуры RescanPanel.
Назначение

Пересканирование содержимого панели iPanel.

Делает то же, что и процедура ReDrawPanel, плюс перечитывает содержимое строк browse, отличных от текущей. Эту процедуру можно вызвать, например, сразу после вызова updateCurrent <Table> или insertCurrent <Table>, если есть уверенность, что внесенные изменения попадут в текущие ограничения. Процедура до последнего держится за текущую запись и ее изменения, ни в коем случае не сбрасывает статуса модификации полей и записи.

Описание

procedure RescanPanel (iPanel : integer);

Параметры

iPanel : integer - номер панели.

Примечание

Для прорисовки записей служат три метода:

ReDrawPanel;
ReScanPanel.
ReReadRecord;

Каждый последующий метод вызывает предыдущий, поэтому не следует вызывать их два подряд.
Выполнив поиск по ключевому слову RescanPanel в файле asdk.chm нашел следующий пример, в котором, действительно в процедуру RescanPanel передается название табличного редактора:

Код: Выделить всё

#commands start at 7700 

const 
scSort = 7500; 
end; 

SortLine StatusLine 
{ 
(scSort..scSort) 
{ 
'~F2~ Sort', cmColumnClicked, kbF2; 
} 
} 

interface test9 (,,scSort) DoAccept; 
create view as select * from X$Files 
order ByName by xf$Name 
order ByCode by xf$Code; 

browse DepBrowse1; 
fields 
xf$name 'Имя файла '; 
xf$code 'Код файла'; 
end; 

handleevent 
cmInit : ClearColumnsSorting(DepBrowse1); 
cmColumnClicked : { 
case GetColumnSorting(DepBrowse1,Target) of 
0: { 
SetColumnSorting(DepBrowse1,Target,-1); 
if Target=#xf$Name then SetOrder(tiByName) 
else SetOrder(tiByCode); 
RescanPanel(DepBrowse1); 
} 
-1: { 
SetColumnSorting(DepBrowse1,Target,0); 
} 
end; 
} 
end; 
end. 
Но, если посмотреть исходники Галактики - везде параметром в процедуру RescanPanel передается номер таблицы, а не номер панели.

Например:
RescanPanel(#KlVidOpl)

Так как же все таки правильно вызывать эту процедуру?
masygreen
партнер
Сообщения: 112
Зарегистрирован: Чт, 20/03/2008 09:10
Имя Фамилия: Максим Черепанов
Откуда: IT
Контактная информация:

Re: Процедура RescanPanel

Сообщение masygreen »

правильнее Rereadrecord(#таблица);
Аватара пользователя
Screw
топ-софт
Сообщения: 73
Зарегистрирован: Пт, 14/09/2007 22:54
Имя Фамилия: Виталий Корзюк
Откуда: ТопСофт
Контактная информация:

Re: Процедура RescanPanel

Сообщение Screw »

Имеет место явная нестыковка терминов. В статье о RescanPanel под "панелью" подразумевается номер узла логической таблицы. То же касается методов логической таблицы ReReadRecord и ReDrawPanel: "панель" = "номер узла".

Должен заметить, что в vip панель (panel) не имеет визуального представления и до некоторого момента эта конструкция использовалась только для связывания "вложенных" в неё экранных форм (screen, browse, tree) с узлом ЛТ и описания обработчика панельных (табличных) событий. Сейчас конструкция panel считается устаревшей, вместо неё применяется явное задание способа навигации в экранной форме - table XXXX, notablenavigation или eventnavigation, а обработка табличных событий описывается с помощью конструкции tableevent.
Ответить