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