Интерфейс возвращает не все параметры

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

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

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

Интерфейс возвращает не все параметры

Сообщение BlazeBio »

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

#include galnet.ccm;
#include galnet.csc;
//#include galnet.inc;
end;
//Начало интерфейса
interface ietalon (,,Sci13Esc)  EscClose, Cyan;//(,,Sci1478EscIns) EscClose, Cyan;
Show At (,,93,25);
var ketalon,kgroup,ckatstan,knrec:comp;
	res:word;
	mcname:string;
	etalmc:string;
	groupmcname:string;
	idwindow:longInt;
	idwindow2:longInt;
	getnrec		 : longInt;
	i:integer;
	j:longint;
	logic:boolean;

/*table struct marktable
			 (
				nRec : comp,
			    cmcnrec: comp
			 )
			 with index
			 (
				 mark01 = nRec(Unique,Surrogate),
			     mark02 = cmcnrec
			 );*/
//function funrec:comp; forward;
create view
var wnrec:comp;
	Markers      : longInt;
    FieldMarkers : longInt;
    IndexNo      : longInt;
	Markers2      : longInt;
    FieldMarkers2 : longInt;
    IndexNo2     : longInt;


  (MarkerStr2,MarkerStr)
 as select
 if (SearchMarker(Markers2, k4.nrec, IndexNo2) = True, 'v', ' '),
 if (SearchMarker(Markers, katmc.nrec, IndexNo) = True, 'v', ' '),
*
 from katmc k4(katmc02),katmc,katmc k1, ppkatstan,ppkatstanmc
where((wnrec==ppkatstan.atl_nrec
and ppkatstan.atl_nrec==ppkatstanmc.cppkatstan
and ppkatstanmc.cmc  ==katmc.nrec
and ppkatstan.cmc==k1.nrec
	and (7=k1.isarch)
	and ppkatstan.cgroupmc==groupmc.nrec
//and 0==k4.isarch
));
parameters kgroup,ketalon,ckatstan;
//-------------------------------------------------------------------------------------------------------------------------
	cmClose:
		{
			message(GetMarkerCount(Markers));
			ketalon:=k1.nrec;
			kgroup:=groupmc.nrec;
				message('ketalon= '+ketalon);
					message('kgroup= '+kgroup);
message('ckatstan= '+ckatstan);

		}
end.
//конец интерфейса
Во всех мессагах значения отличны от нуля.

Вызов ietalon происходит из другого интерфейса в по cmEdit

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

//------------------------------------------------------------------------------------------------------------------------
			cmEdit:
				{
				  kgroupnrec:=groupmc.nrec;
				  ketalonnrec:=k1.nrec;
				  kstan:=ppkatstan.atl_nrec;
				  res:=RunInterface('ietalon',kgroupnrec,ketalonnrec,kstan);
				  message(kgroupnrec+'='+ketalonnrec+'='+ppkatstan.atl_nrec);
				  if getfirst ppkatstan where((kstan==ppkatstan.atl_nrec))=tsOk
				  {
					ppkatstan.cmc:=ketalonnrec;
					ppkatstan.cgroupmc:=kgroupnrec;
					update current ppkatstan;
				  }
				  rescanpanel(#ppkatstan);
				}
//------------------------------------------------------------------------------------------------------------------------
Здесь уже в мессаге только kstan имеет ненулевое значение.
Не могу понять в чём может быть причина такого поведения параметров?
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Re: Интерфейс возвращает не все параметры

Сообщение m0p3e »

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

Re: Интерфейс возвращает не все параметры

Сообщение BlazeBio »

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

Re: Интерфейс возвращает не все параметры

Сообщение BlazeBio »

Из доки:
"Если запуск интерфейса завершился командой cmCancel или cmClose, то параметры возвращаются не измененными. Для того чтобы такой интерфейс все-таки вернул значения в параметрах необходимо обработать событие cmCancel в обработчике главного окна интерфейса следующим образом:

cmCancel: begin
CloseInterface(cmDefault); // - здесь может быть любая
// - команда
stop; // - этот оператор нужен для того, чтобы не вызвался
// стандартный обработчик cmCancel
end;
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Если все-таки требуется получить переданное значение, то необходимо объявить параметром переменную того же типа и при выходе (для окон выбора это событие cmDefault) присвоить переменной значение из буфера.
"
Сделал так в cmCancel, в cmDefault присвоил параматрам значения, дописал doAccept. Все параметры передались нормально, так как надо :grin: . Можно ли нечто подобное сделать для cmClose и чтобы всё-таки там передавались параметры, или это возможно только через cmDefault?
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Re: Интерфейс возвращает не все параметры

Сообщение m0p3e »

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

Re: Интерфейс возвращает не все параметры

Сообщение BlazeBio »

Теперь работает как надо! Убрал код в сmCancel и вставил его в cmClose, а также убрал doAccept. Теперь параметры возвращаются по закрытию интерфеса без нажатия Enter. 8-)
Ответить