Страница 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.