Страница 1 из 3
Вопросы о маркерах...
Добавлено: 12 авг 2010, 19:52
BlazeBio
Задача стоит такая - выделять несколько записей и сохранять выделение при закрытии фейса, а также чтобы потом выделенные записи попали в другое окно. Использовал recMarker {katmc.nrec}, записи выделяются и сохраняются во временной таблицы.
Использовал таблицу из примеров в доке
Код: Выделить всё
function MyTable_Add(add_n: comp): boolean;
{
//clearbuffer(#mytable);
if (getFirst marktable where ((add_n == marktable.cmcNrec)) = tsOk)
{
delete current marktable;
}
else
{
marktable.cmcNrec := add_n;
if insert current marktable <> tsOk
{
message(''#3'Ошибка добавления записи в таблицу MyTable');
MyTable_Add := false;
}
else
{
MyTable_Add := true;
//message(add_n+' '+add_name);
}
}
}
Как теперь, используя данные выделенные в браузе одного окна, передать браузу другого окна используя временную таблицу ?
В доке по маркерам есть какой-то непонятный файл marker.vih(поэтому не смог запустить тестовый пример, а без запуска как-то сходу не поймёшь что к чему), а на форуме много всего, что глаза разбегаются. Хочу разобраться с работой маркеров. Помогите, плиз.
Re: Вопросы о маркерах...
Добавлено: 12 авг 2010, 20:06
galover
merker.vih - кака не пользуйся, просто обертка вокруг стандартного маркера (идея хорошая, реализация отстой). Используй стандартный маркер - тип longint. Дальше можешь передавать свой маркер за граница интерфейса. Примерно так.
Re: Вопросы о маркерах...
Добавлено: 13 авг 2010, 10:47
m0p3e
Учимся читать доки. Пример из VipProgr.chm
Код: Выделить всё
interface Dict 'Таблицы системы'
(,hcDictInterface,scExtFiles) EscClose, Cyan;
show at ( 3, 1, 76, 26);
create view AllDictTables
var
Markers : longInt;
FieldMarkers : longInt;
IndexNo : longInt;
(MarkerStr)
as select
if (SearchMarker(Markers, x$Files.xf$Code, IndexNo) = True, 'v', ' '),
* from x$Files;
panel pnTablesList;
table x$Files;
browse bwTableList;
fields
MarkerStr '' :[1], Skip;
x$Files.xf$Code 'Код' : Protect;
x$Files.xf$Name 'Имя таблицы' : Protect;
x$Files.xf$Title 'Заглавие таблицы' : Protect;
end;
handleEvent
cmMarkRec: {
InvertMarker(Markers, x$Files.xf$Code);
if ((GetNext x$Files) = tsOk) {};
RescanPanel(tnx$Files);
}
cmMarkAll: {
StartNewVisual( vtRotateVisual, vfTimer, 'Помечаю все', 1);
PushPos(tnx$Files);
if ((Modifier GetFirst x$Files) = tsOk)
begin
do
begin
InsertMarker(Markers, x$Files.xf$Code);
NextVisual;
end;
while (Modifier GetNext x$Files = tsOk)
end;
PopPos(tnx$Files);
StopVisual('', 0);
RescanPanel(tnx$Files);
}
cmInvertMark: {
StartNewVisual( vtRotateVisual, vfTimer, 'Инвертирую список', 1);
PushPos(tnx$Files);
if ((Modifier GetFirst x$Files) = tsOk)
begin
do
begin
InvertMarker(Markers, x$Files.xf$Code);
NextVisual;
end;
while (Modifier GetNext x$Files = tsOk)
end;
PopPos(tnx$Files);
StopVisual( '', 0);
RescanPanel(tnx$Files);
}
cmUnMarkAll: {
ClearMarker(Markers);
RescanPanel(tnx$Files);
}
end;
end; // panel
handleEvent
cmInit: {
Markers := InitMarker('ViewDictMarkers', 2, 1000, 100);
FieldMarkers := InitMarker('', 2, 20, 20);
}
cmDone: {
DoneMarker(Markers, 'ViewDictMarkers');
DoneMarker(FieldMarkers, '');
}
end;
end.
Re: Вопросы о маркерах...
Добавлено: 13 авг 2010, 11:31
BlazeBio
m0p3e, если у вас константы по событиям маркера и константа scExtFiles(потому что в galnetах у меня ни одной нет!)? Или все их прописывать вручную?
Re: Вопросы о маркерах...
Добавлено: 13 авг 2010, 11:43
BlazeBio
...потому что, если вручную прописывать константы, то ничего не выходит : получается обычный список таблиц в браузе...
Re: Вопросы о маркерах...
Добавлено: 13 авг 2010, 11:53
m0p3e
scExtFiles - статус лайн. Нужно заменить на любой с поддержкой пометок. sci1EnIns например.
Сам пример скорее всего выдран из саппорта, поэтому его и нет.
О каких событиях маркеров идет речь? Откуда у маркеров взялись события?
Re: Вопросы о маркерах...
Добавлено: 13 авг 2010, 12:01
BlazeBio
Я имею ввиду события cmMarkRec, cmMarkAll, cmInvertMark, cmUnMarkAll. А статус-строку уже подменял(Sci1478EscIns) - появилась статус-строка с ins,+,- ... все равно получается обычный брауз без работающих пометок...
Re: Вопросы о маркерах...
Добавлено: 13 авг 2010, 12:07
m0p3e
Это не события маркеров. Это события статус-лайна.
При компиляции ругается, что они не найдены?
Re: Вопросы о маркерах...
Добавлено: 13 авг 2010, 12:10
BlazeBio
Нет... Даже, если убрать константы для cmMarkRec и т.д., компилятор не ругается ...и в браузе всё также не работают пометки...
Re: Вопросы о маркерах...
Добавлено: 13 авг 2010, 12:22
m0p3e
Мда... Примерчик так себе...
Нужно заменить события:
cmMarkRec - cmMarkUnMark
cmMarkAll - cmSelectAll
cmUnMarkAll - cmUnSelectAll
cmInvertMark - cmInvertAll
Re: Вопросы о маркерах...
Добавлено: 13 авг 2010, 12:33
BlazeBio
А теперь ругается компилятор на первой же сmke - " Ошибка: Oops. Такой команды нет: MarkUnMark"...
Re: Вопросы о маркерах...
Добавлено: 13 авг 2010, 13:25
BlazeBio
Всё на шёл почему ругается
http://www.tyumbit.ru/gal_forum/viewtopic.php?t=5794..
нужно так:
cmDoMarkUnMark
cmSelAll
cmDoInvertMark
cmUnSelAll
Собственно, а как вытянуть нужный nrec из markers или как просканить содержимое markers? Мне нужны именно nrecи.
Re: Вопросы о маркерах...
Добавлено: 13 авг 2010, 13:43
m0p3e
Ругаться не будет если подключить galnet.inc.
Что в маркер сохраните, то там и будет.
Читается маркер элементарно. Понадобятся функции:
GetMarker
GetMarkerCount
и цикл For
Re: Вопросы о маркерах...
Добавлено: 13 авг 2010, 14:01
BlazeBio
А нельзя ли нечто подобное как-то сделать, используя recmarker {*.nrec}?
Re: Вопросы о маркерах...
Добавлено: 13 авг 2010, 16:42
m0p3e
А кто такой recmarker?
Существуют два основных способа сохранения/обработки пометок.
1. Работа через маркеры.
2. Работа через таблицы. Например Pick.