Страница 1 из 1

Всегда запускается одно и тоже окно

Добавлено: 23 июл 2010, 16:41
BlazeBio

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

const
	cmMC=7200;
	cmStatus=7201;
	cmFormat=7202;
	cmLine=7203;
	Sci1478EscIns =6994;
end;
interface iServePlan'Заполнение производственных планов';
Show At (,,93,25);
panel pServe;
show at(,,,);
	screen sServe
		buttons
			cmMC;
			cmStatus;
			cmFormat;
			cmLine;
<<
	<.МЦ.>
	<.Статусы.>
	<.Форматы.>
	<.Линии.>
>>
	end;
	handleevent
		cmMC:
			{
				RunWindow('mc');
			}
		cmStatus:
			{
				RunWindow('status');
			}
		cmFormat:
			{
				RunWindow('format');
			}
		cmLine:
			{
				RunWindow('line');
			}
	end;
end;

window mc
 show at (,,93,25);
 panel pMc
 show at (,,,);
 browse bMc(,,Sci1478EscIns)
	table k1,cartesian;
	recMarker {k2.nrec};
	 fields
	 		k1.name 'Эталон':[10];
	 		ppkatstan.name 'МЦ(Э,Л)':[10];
			k2.name 'МЦ обычная':[20];
	 		groupmc.name'Группа Мц':[15];

 end;
handleevent
	 cmInit:
	 {

	 }
	 cmInsert:
	 {
	 }
	 cmDelete:
	 {

	 }
	 cmClose:
	 {
					   stop;
		   CloseWindow('mc');
	 }
 end;
 end;

end;
window status
	  show at (,,93,25);
	  panel pstatus
	  show at (,,,);
	  browse bstatus(,,Sci1478EscIns)
		 table ppstatus,cartesian;
		 recMarker {ppstatus.atl_nrec};
		  fields
		  	ppstatus.name 'Статус документа':[10];
	  end;
	handleevent
			cmInit:
			{
	
			}
			cmInsert:
			{
			}
			cmDelete:
			{
	
			}
			cmClose:
			{
							  stop;
				  CloseWindow('status');
			}
		end;
	  end;

end;
window format
end;
window line
end;
end.
Два последних окна, пока не используются. При нажатии на любую из кнопок вызывается почему-то окно mc. В чём может быть причина такого поведения окон ?

Re: Всегда запускается одно и тоже окно

Добавлено: 23 июл 2010, 16:55
Den
Процедура RunWindow

Назначение

Открывает окно, описанное в разделе window.

Описание

procedure RunWindow (windowNumber : integer);
Параметры

windowNumber : integer - номер окна.

Re: Всегда запускается одно и тоже окно

Добавлено: 23 июл 2010, 17:11
BlazeBio
Den писал(а):Процедура RunWindow

Назначение

Открывает окно, описанное в разделе window.
Den, если загнать кнопки в окно, то при инициализации интерфейса iServePlan видно только пустое окно без кнопок ?!

Re: Всегда запускается одно и тоже окно

Добавлено: 23 июл 2010, 18:51
LaaLaa
вместо

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

CloseWindow('mc');
надо

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

CloseWindow(mc);
тип параметра число

Re: Всегда запускается одно и тоже окно

Добавлено: 23 июл 2010, 19:00
BlazeBio
LaaLaa писал(а):вместо

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

CloseWindow('mc');
надо

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

CloseWindow(mc);
тип параметра число
Если опустить ковычки, то компилятор выдаёт ошибку:"Нет такого поля, метода..."

Re: Всегда запускается одно и тоже окно

Добавлено: 23 июл 2010, 20:02
BlazeBio
Окно window mc открывается даже по двойному щелчку мыши в любом месте скрина...

Re: Всегда запускается одно и тоже окно

Добавлено: 24 июл 2010, 09:29
edward_K
обычно вызываемые окна пишут вначале а не в конце - потому и ругается. Если хотите в качестве строки вызывать, то есть RunAnyView. А так во всех функциях по работе с окнами форматами и так далее нужно писать индетификатор окна. Вообще внимательно следите за логом компиляции(и включите все возможные предупреждения в vip.cfg) - наверняка будете удивлены сколько там у вас мусора. Опыт показывает , что сведение предупреждений к нулю устраняет кучу огрехов в работе фейса.

Re: Всегда запускается одно и тоже окно

Добавлено: 27 июл 2010, 15:17
Screw
Если очень уж нужно использовать CloseWindow до описания окна, заведите целочисленную переменную, значение которой можно инициализировать где-нить в cmInit интерфейса, и используйте её в вызове CloseWindow.

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

  longint SomeWindowNumber;

  ...
  CloseWindow(SomeWindowNumber);
  ...

  handleevent
    cmInit: {
      ...
      SomeWindowNumber := mc;
      ...
    }
    ...
  end;

Re: Всегда запускается одно и тоже окно

Добавлено: 28 июл 2010, 11:44
BlazeBio
edward_K писал(а):обычно вызываемые окна пишут вначале а не в конце - потому и ругается. Если хотите в качестве строки вызывать, то есть RunAnyView. А так во всех функциях по работе с окнами форматами и так далее нужно писать индетификатор окна. Вообще внимательно следите за логом компиляции(и включите все возможные предупреждения в vip.cfg) - наверняка будете удивлены сколько там у вас мусора. Опыт показывает , что сведение предупреждений к нулю устраняет кучу огрехов в работе фейса.
Пытался RunAnyView('interface iServePlan.mc',false), RunAnyView('iServePlan.mc',false) и RunAnyView('mc',false) - пишется сообщение, что не найден интерфейс с выражением в ковычках в RunAnyView.В чём может быть дело ? Может эта процедура не работает с окнами ? И как включить все предупреждения в vip.cfg ?
Получилось открыть нужное окно RunWindow, и то только тогда, когда использовал идентификаторы в cmInit. :grin:

Re: Всегда запускается одно и тоже окно

Добавлено: 28 июл 2010, 11:53
edward_K
RunAnyView('window mc',false) попробуйте, но вообще для окон не разу не использовал. runWindow c индефикатором окна всегда хватало. Просто окна перенесите в начало фейса и все. Обычно перееменные(которые не нужны во вью для фильтров), вью, формы, функции, окна, главное окно, главный обработчик. для функции есть возможность объявить ее в начале(forward), а описать позже.

Re: Всегда запускается одно и тоже окно

Добавлено: 28 июл 2010, 11:55
LaaLaa
edward_K писал(а):обычно вызываемые окна пишут вначале а не в конце - потому и ругается. Если хотите в качестве строки вызывать, то есть RunAnyView. А так во всех функциях по работе с окнами форматами и так далее нужно писать индетификатор окна. Вообще внимательно следите за логом компиляции(и включите все возможные предупреждения в vip.cfg) - наверняка будете удивлены сколько там у вас мусора. Опыт показывает , что сведение предупреждений к нулю устраняет кучу огрехов в работе фейса.

А еще в разделе [vip] в настройке компилятора можно включить параметр StrictVip=on:
StrictVip
Тип Да/Нет

Назначение Усиливает "строгость" языка. Выдает предупреждения:
если отсутствует "точка с запятой" после оператора, если за ним следует еще один оператор;
если после секции var отсутствует запятая.

По умолчанию выключен.

Синоним
/sv+
/sv-

Пример использования
StrictVip=on
В настройках Viper - это пункт "Усилить строгость языка"

Re: Всегда запускается одно и тоже окно

Добавлено: 28 июл 2010, 12:25
edward_K
в cfg
[Compilers]
ErrorLevel=2
очень желательно

Re: Всегда запускается одно и тоже окно

Добавлено: 28 июл 2010, 12:48
BlazeBio
Проверил: ErrorLevel=2 уже стояла, а StrictVip=on добавил.
RunAnyView('window mc',false) не работает. Ошибка нет ресурса.

Re: Всегда запускается одно и тоже окно

Добавлено: 28 июл 2010, 12:52
LaaLaa
BlazeBio писал(а):Проверил: ErrorLevel=2 уже стояла, а StrictVip=on добавил.
RunAnyView('window mc',false) не работает. Ошибка нет ресурса.
:) совет был не по этой теме, имел в виду в общем диагностику правильности кода.

а RunAnyView - на WIndow в принципе не действует.