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

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

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

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

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

Сообщение BlazeBio »

в примерах в доке встречается

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

tree trSelPers (,,scAtlTreeMark);
  table Deps;
  recmarker {Persons.NRec};
  recmarker {Deps.NRec};

fields
  [Name1] GetFldName 'Имя': [40];
end;
...тоже происходит пометка. Автоматически создаётся колонка с 'V', а также при пометке подсвечивается цветом записи.(выделяется запись даже без поключения соответствующей статус-строки). Очень много преимуществ... Поэтому хотелось бы сделать через него.
Ещё и такое есть:

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

browse brAutoMark 'AutoMarkerBrouse';
  show at (,2,,10);
  table MyTable;
  recMarker = pMarker {MyTable.nRec};

fields
  MyTable.nRec
            'NREC'
            ('NREC ',,)
            : [3], protect;

  MyTable.Npp
            'Nпп'
            ('Номер ',,)
            : [3], protect;

  MyTable.sName
            'Наименование'
            ('Наименование',,)
            : [10];

  MyTable.pole1
            'Текст'
            ('Просто текст',,)
            : [10];

  MyTable.wCode
            'Код'
            ('Код ',,)
            : [3], protect;

  pMarker.pNRec
            'NRECM'
            ('NRECM ',,)
            : [10], protect;
end; // browse brAutoMark

//---------------------------------------------------------
browse brAutoMark2 'AutoMarkerBrouse2';
  show at (,2,,10);
  table MyTableM;
  recMarker {MyTableM.nRec};

fields
  MyTableM.nRec
            'NREC'
            ('NREC ',,)
            : [3], protect;

  MyTableM.Npp
            'Nпп'
            ('Номер ',,)
            : [3], protect;

  MyTableM.sName
            'Наименование'
            ('Наименование',,)
            : [10];
end; // browse brAutoMark2

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

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

Сообщение m0p3e »

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

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

Сообщение BlazeBio »

Попытался добавить маркер конкретно к своей задаче - ничё не фурычит. Может из-за этого galnet.inc. Как его подключить? Так #include galnet.inc? Или нужно прописать путь сервера где находится #include '\\Srv31\gal810ora\frm_unpack\galFrm\Inc\galnet.inc'?

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

//vipinterface ietalon parameters (kgroup:comp;ketalon:comp;ckatstan:comp);
#include galnet.ccm;
#include galnet.csc;
end;
interface ietalon alwaysReturn;
Show At (,,93,25);
var ketalon,kgroup,ckatstan:comp;
	res:word;
	mcname:string;
	etalmc:string;
	groupmcname:string;
	idwindow:longInt;
	Markers      : longInt;
    FieldMarkers : longInt;
    IndexNo      : longInt;
	Markers2      : longInt;
    FieldMarkers2 : longInt;
    IndexNo2      : longInt;
	getnrec		 : longInt;
	i:integer;
	j:longint;
table struct marktable
			 (
				nRec : comp,
			    cmcnrec: comp
			 )
			 with index
			 (
				 mark01 = nRec(Unique,Surrogate),
			     mark02 = cmcnrec
			 );
function funrec:comp; forward;
create view
var wnrec:comp
  (MarkerStr2,MarkerStr)
 as select
 if (SearchMarker(Markers2, k4.nrec, IndexNo2) = True, 'v', ' '),
 if (SearchMarker(Markers, katmc.nrec, IndexNo) = True, 'v', ' '),
 ppkatstan.name,katmc.name from ppkatstan,ppkatstanmc,katmc, katmc k4(katmc02)
where((wnrec==ppkatstan.atl_nrec and
ppkatstan.atl_nrec==ppkatstanmc.cppkatstan
and ppkatstanmc.cmc  ==katmc.nrec and 0==k4.isarch));



create view etalon
as select /*etalon(ppkatstan.atl_nrec),*,*/k1.name,ppkatstan.name,*//,groupmc.name,*
from katmc k1,PPKATSTAN,groupmc
where ((
ppkatstan.cmc==k1.nrec
and (7=k1.isarch)
and groupmc.nrec==ppkatstan.cgroupmc));

parameters kgroup,ketalon,ckatstan;
function funrec :comp;
{
	 funrec:=ckatstan;
	 //message(ckatstan);
}
tableevent table ppkatstanmc
	cmDeleteRecord :
	{
	delete current ppkatstanmc;
	}
end;
window wmc 'Выбор реальных МЦ';
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);
		  }
	  }
   }
 panel pwMC
  browse bwMC (,,Sci1478EscIns)
  table k4,cartesian;
  //recMarker {k4.nrec};
 fields
 	MarkerStr2        ''  :[1], Skip;
 	k4.name 'Реальные МЦ':protect;
end;

handleEvent
			cmDoMarkUnMark :
			{
			InvertMarker(Markers2, k4.nrec);
			 if ((GetNext k4) = tsOk) {};
			RescanPanel(#k4);
			}
			cmUnSelAll:
 			{
			  ClearMarker(Markers2);
			  RescanPanel(#k4);
			}
			cmSelAll: {
			  StartNewVisual( vtRotateVisual, vfTimer, 'Помечаю все', 1);
			  PushPos(#k4);
			  if ((Modifier GetFirst k4) = tsOk)
			  begin
				do
				begin
				  InsertMarker(Markers, k4.nrec);
				  NextVisual;
				end;
				while (Modifier GetNext k4 = tsOk)
			  end;
			  PopPos(#k4);
			  StopVisual('', 0);
			  RescanPanel(#k4);
			}
			cmDoInvertMark: {
			  StartNewVisual( vtRotateVisual, vfTimer, 'Инвертирую список', 1);
			  PushPos(#k4);
			  if ((Modifier GetFirst k4) = tsOk)
			  begin
				do
				begin
				  InvertMarker(Markers, k4.nrec);
				  NextVisual;
				end;
				while (Modifier GetNext k4 = tsOk)
			  end;
			  PopPos(#k4);
			  StopVisual( '', 0);
			  RescanPanel(#k4);
			}

end;
end;
handleEvent
	 	cmInit:
		{
			 Markers2 := InitMarker('spisokmc2', 2, 1000, 100);
			   FieldMarkers2 := InitMarker('', 2, 20, 20);
		}

		cmClose:
		{
			message(GetMarkerCount(Markers2));

				  _loop katmc
				  {

					   //GetMarker(Markers2,i,k4.nrec)
					   if getfirst ppkatstanmc where((ckatstan==ppkatstanmc.cppkatstan))=tsOk
					   {
						if (katmc.nrec=ppkatstanmc.cmc)
 							 {
								 message('№1= '+katmc.nrec);
								 j:=GetMarkerCount(Markers2) ;
								for (i := 0; i <GetMarkerCount(Markers2) ; i++)
								 {
									 GetMarker(Markers2,i,getnrec);
									 message(getnrec);
									if (getnrec<>katmc.nrec)
									{
										 delete current ppkatstanmc;
										 	rescanpanel(#ppkatstan);
										 rescanpanel(#ppkatstanmc);
										  rescanpanel(#katmc);
									}
								 }
						     }
					   }
					   else
					   {
							ppkatstanmc.cmc:=katmc.nrec;
							ppkatstanmc.cppkatstan:=ckatstan;
							insert current ppkatstanmc;
								rescanpanel(#ppkatstan);
							rescanpanel(#ppkatstanmc);
							rescanpanel(#katmc);
					   }
				  }





		}
		cmDone:
		{
			   DoneMarker(Markers2, 'spisokmc2');
			    DoneMarker(FieldMarkers2, '');
		}
end;
end;

panel petalon
 screen setalon (,,Sci1478EscIns)
    show at (,,,8);
  fields
  	mcname:noprotect;
  	etalmc:protect,pickbutton;
  	groupmcname:protect,pickbutton;
  buttons
	cmRealMC;
<<
    МЦ          .@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    Эталон МЦ   .@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    Группа МЦ   .@@@@@@@@@@@@@@@@@@@@@@@@@@@@

 			<.~в~ыбор МЦ.>


>>
end;
  browse  betalon2 (,,Sci1478EscIns);
      show at (,9,,);
	table ppkatstan,cartesian;
	//recMarker {katmc.nrec};
	fields
		MarkerStr        ''  :[1], Skip;
		katmc.name:protect;
  end;
	handleevent
		cmCheckField:
		{
			 case CurField of
				 #mcname:
				 {
					 if etalon.getfirst ppkatstan where((ckatstan==ppkatstan.atl_nrec))=tsok
					 {
						 etalon.ppkatstan.name:=mcname;
						 update current ppkatstan;
					 }
 						 rescanpanel(#ppkatstan);
				 }
			 end;
		}
		cmDoMarkUnMark:
		{
			InvertMarker(Markers, katmc.nrec);
			 if ((GetNext katmc) = tsOk) {};
			 RescanPanel(#katmc);
		}
		cmUnSelAll:
 		{
		  ClearMarker(Markers);
		  RescanPanel(#katmc);
		}
		cmSelAll: {
		  StartNewVisual( vtRotateVisual, vfTimer, 'Помечаю все', 1);
		  PushPos(#katmc);
		  if ((Modifier GetFirst katmc) = tsOk)
		  begin
			do
			begin
			  InsertMarker(Markers, katmc.nrec);
			  NextVisual;
			end;
			while (Modifier GetNext katmc = tsOk)
		  end;
		  PopPos(#katmc);
		  StopVisual('', 0);
		  RescanPanel(#katmc);
		}
		cmDoInvertMark: {
		  StartNewVisual( vtRotateVisual, vfTimer, 'Инвертирую список', 1);
		  PushPos(#katmc);
		  if ((Modifier GetFirst katmc) = tsOk)
		  begin
			do
			begin
			  InvertMarker(Markers, katmc.nrec);
			  NextVisual;
			end;
			while (Modifier GetNext katmc = tsOk)
		  end;
		  PopPos(#katmc);
		  StopVisual( '', 0);
		  RescanPanel(#katmc);
		}

	end;
end;
	handleevent
	  	cmInit:
	  		{
				 Markers := InitMarker('spisokmc', 2, 1000, 100);
				 FieldMarkers := InitMarker('', 2, 20, 20);
				 //FieldMarkers := InitMarker('', 2, 20, 20);
				idwindow:=wmc;
				// message(ckatstan);
				 if getfirst ppkatstan where ((ckatstan==ppkatstan.atl_nrec))=tsok
				 {
					// mcname:=ppkatstan.name;
					 wnrec:=ppkatstan.atl_nrec;
				 }

				 if etalon.getfirst ppkatstan where ((ckatstan==ppkatstan.atl_nrec))=tsok
				{
					mcname:=etalon.ppkatstan.name;
					ckatstan:=etalon.ppkatstan.atl_nrec;
				}
			if etalon.getfirst k1 where ((ketalon==k1.nrec))=tsok
				{
					etalmc:=etalon.k1.name;
					ketalon:=etalon.k1.nrec;
				}
			if etalon.getfirst groupmc where ((kgroup==groupmc.nrec))=tsok
				{
					groupmcname:=etalon.groupmc.name;
					ckatstan:=etalon.groupmc.nrec;
				}
				rescanpanel(setalon);
				rescanpanel(#etalon.ppkatstan);
				rescanpanel(#etalon.k1);
				rescanpanel(#etalon.groupmc);
				rescanpanel(#katmc);
				rescanpanel(betalon2);
			}
		cmPick:
		{
				  UpdateTable();
 				  case CurField of
					#etalmc:
					{
						res:=  RunInterface(PickKatMC,ketalon);
						ppkatstan.cmc:=ketalon;
						if etalon.getfirst k1 where ((ketalon==k1.nrec))=tsOk
							{
								etalmc:=etalon.k1.name;
								ketalon:=etalon.k1.nrec;
							}
						rescanpanel(#etalon.k1);
						rescanpanel(#ppkatstan);
	     			}
					#groupmcname:
					{
						res:=  RunInterface(PickGroupMC,kgroup);
						ppkatstan.cgroupmc:=kgroup;
						if etalon.getfirst groupmc where ((kgroup==groupmc.nrec))=tsok
							{
								groupmcname:=etalon.groupmc.name;
								ckatstan:=etalon.groupmc.nrec;
							}
							rescanpanel(#etalon.groupmc);
							rescanpanel(#ppkatstan);
					}
					end;
		}
		cmRealMC:
		{
			 RunWindowModal(wmc);
		}
		cmClose:
		{
			message(GetMarkerCount(Markers));

		}
		cmDone:
		{
			   DoneMarker(Markers, 'spisokmc');
			    DoneMarker(FieldMarkers, '');
		}
	end;
end.
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

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

Сообщение m0p3e »

по симптому "ничего не фурычит" поставить диагноз не представляется возможным.

проект:
#include galnet.inc
end;
конфиг:
[Compilers]
IncludesPath=%GAL810FRM%\INC
IncludesPath=%GAL810FRM%\INC\ADM
IncludesPath=%GAL810FRM%\INC\ASUP
BlazeBio
Местный житель
Сообщения: 386
Зарегистрирован: 27 апр 2010, 14:31
Контактная информация:

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

Сообщение BlazeBio »

В galnet.inc есть файл, которого я не могу найти и компилятор тоже, из-за этого не компилит...
Вот этот файл
COSYSTBL.INC
А насчёт маркеров, может из-за того, что я использовал cmDoMarkUnMark и т.д. не в том handleevent, или, нужен был tableevent (в последнее время у меня как правило из-за этого многое не работало). В отличие от примера у меня есть окно, может и в этом причина. Ещё в примере x$Files.xf$Code, а у меня нрек... перебираю все возможное варианты различий между маркерами в моём фейсе и тестовом, может получится натолкнутся на хорошую мысль...
BlazeBio
Местный житель
Сообщения: 386
Зарегистрирован: 27 апр 2010, 14:31
Контактная информация:

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

Сообщение BlazeBio »

Убрал пока galnet.inc, мессаги проставил. Не работает... Ни одной мессаги не выскочило при попытке пометки записи. :x
BlazeBio
Местный житель
Сообщения: 386
Зарегистрирован: 27 апр 2010, 14:31
Контактная информация:

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

Сообщение BlazeBio »

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

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

Сообщение BlazeBio »

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

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

Сообщение m0p3e »

Так точно.

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

Назначение
Функция берет элемент с номером indexNo в маркере markers.

Описание
function GetMarker (markers : longInt;
                    indexNo : longInt;
                    item : anyType
                   ) : boolean;
Параметры
Входные:
markers : longInt - уникальный идентификатор маркера.
indexNo - номер элемента маркера.

Выходные:
item : anyType - значение элемента с номером indexNo.

Возвращаемое значение
Возвращается значение найденного элемента (параметр item) и логический результат работы функции: если элемент найден, то функция возвращает true, иначе (если номер искомого элемента больше числа элементов маркера) функция возвращает false.
BlazeBio
Местный житель
Сообщения: 386
Зарегистрирован: 27 апр 2010, 14:31
Контактная информация:

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

Сообщение BlazeBio »

А вообще кто-нибудь делал маркеры для браузов, состоящих из нескольких таблиц?
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

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

Сообщение Den »

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

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

Сообщение BlazeBio »

Den писал(а): Вы бы сразу лучше описали словесно, что хотите реализовать сим способом. А то тут много кто чего делал... :grin: Может бы что другого посоветовал люд местный тут.
Каюсь, как-то сразу в голову не пришло... :oops: Как говорится "лучше поздно, чем никогда".
BlazeBio
Местный житель
Сообщения: 386
Зарегистрирован: 27 апр 2010, 14:31
Контактная информация:

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

Сообщение BlazeBio »

Я, наверное, понял в чём причина. Ведь маркер сохраняется в dsk-файл. А этот файл я не очищаю, если в интерфейсе произвожу какие-то изменения. Как правильно его очистить или вовсе удалить? Получается не очень удобно при каждой перекомпиляции(практически) перименовывать параметр name в Name в процедуре DoneMarker.
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

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

Сообщение Den »

В доке же по випу все прозрачно с этим....

....
Удаляет все элементы из маркера markers.

procedure ClearMarker (markers : longInt);
Параметры

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

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

Сообщение BlazeBio »

Нет СlearMarker не работает. Он стирает содержимое маркера markers. А нужно как бы это сказать правильно - пересоздать, удалить маркер markers из dsk...ну я, не знаю, возможно удалить сам файл dsk.
Ответить