Вопросы о маркерах...

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

BlazeBio
Местный житель
Сообщения: 386
Зарегистрирован: 27 апр 2010, 14:31
Контактная информация:

Вопросы о маркерах...

Сообщение 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(поэтому не смог запустить тестовый пример, а без запуска как-то сходу не поймёшь что к чему), а на форуме много всего, что глаза разбегаются. Хочу разобраться с работой маркеров. Помогите, плиз.
galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

Re: Вопросы о маркерах...

Сообщение galover »

merker.vih - кака не пользуйся, просто обертка вокруг стандартного маркера (идея хорошая, реализация отстой). Используй стандартный маркер - тип longint. Дальше можешь передавать свой маркер за граница интерфейса. Примерно так.
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Re: Вопросы о маркерах...

Сообщение 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.
BlazeBio
Местный житель
Сообщения: 386
Зарегистрирован: 27 апр 2010, 14:31
Контактная информация:

Re: Вопросы о маркерах...

Сообщение BlazeBio »

m0p3e, если у вас константы по событиям маркера и константа scExtFiles(потому что в galnetах у меня ни одной нет!)? Или все их прописывать вручную?
BlazeBio
Местный житель
Сообщения: 386
Зарегистрирован: 27 апр 2010, 14:31
Контактная информация:

Re: Вопросы о маркерах...

Сообщение BlazeBio »

...потому что, если вручную прописывать константы, то ничего не выходит : получается обычный список таблиц в браузе...
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Re: Вопросы о маркерах...

Сообщение m0p3e »

scExtFiles - статус лайн. Нужно заменить на любой с поддержкой пометок. sci1EnIns например.
Сам пример скорее всего выдран из саппорта, поэтому его и нет.

О каких событиях маркеров идет речь? Откуда у маркеров взялись события? :)
BlazeBio
Местный житель
Сообщения: 386
Зарегистрирован: 27 апр 2010, 14:31
Контактная информация:

Re: Вопросы о маркерах...

Сообщение BlazeBio »

Я имею ввиду события cmMarkRec, cmMarkAll, cmInvertMark, cmUnMarkAll. А статус-строку уже подменял(Sci1478EscIns) - появилась статус-строка с ins,+,- ... все равно получается обычный брауз без работающих пометок...
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Re: Вопросы о маркерах...

Сообщение m0p3e »

Это не события маркеров. Это события статус-лайна.
При компиляции ругается, что они не найдены?
BlazeBio
Местный житель
Сообщения: 386
Зарегистрирован: 27 апр 2010, 14:31
Контактная информация:

Re: Вопросы о маркерах...

Сообщение BlazeBio »

Нет... Даже, если убрать константы для cmMarkRec и т.д., компилятор не ругается ...и в браузе всё также не работают пометки...
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Re: Вопросы о маркерах...

Сообщение m0p3e »

Мда... Примерчик так себе... :)
Нужно заменить события:
cmMarkRec - cmMarkUnMark
cmMarkAll - cmSelectAll
cmUnMarkAll - cmUnSelectAll
cmInvertMark - cmInvertAll
BlazeBio
Местный житель
Сообщения: 386
Зарегистрирован: 27 апр 2010, 14:31
Контактная информация:

Re: Вопросы о маркерах...

Сообщение BlazeBio »

А теперь ругается компилятор на первой же сmke - " Ошибка: Oops. Такой команды нет: MarkUnMark"...
BlazeBio
Местный житель
Сообщения: 386
Зарегистрирован: 27 апр 2010, 14:31
Контактная информация:

Re: Вопросы о маркерах...

Сообщение BlazeBio »

Всё на шёл почему ругается http://www.tyumbit.ru/gal_forum/viewtopic.php?t=5794..
нужно так:

cmDoMarkUnMark
cmSelAll
cmDoInvertMark
cmUnSelAll

Собственно, а как вытянуть нужный nrec из markers или как просканить содержимое markers? Мне нужны именно nrecи.
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Re: Вопросы о маркерах...

Сообщение m0p3e »

Ругаться не будет если подключить galnet.inc.

Что в маркер сохраните, то там и будет.
Читается маркер элементарно. Понадобятся функции:
GetMarker
GetMarkerCount
и цикл For
BlazeBio
Местный житель
Сообщения: 386
Зарегистрирован: 27 апр 2010, 14:31
Контактная информация:

Re: Вопросы о маркерах...

Сообщение BlazeBio »

А нельзя ли нечто подобное как-то сделать, используя recmarker {*.nrec}?
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Re: Вопросы о маркерах...

Сообщение m0p3e »

А кто такой recmarker?

Существуют два основных способа сохранения/обработки пометок.
1. Работа через маркеры.
2. Работа через таблицы. Например Pick.
Ответить