Страница 1 из 1
					
				Как отследить, загружен ли интерфейс
				Добавлено: 03 май 2005, 13:21
				 Juve
				Необходимо отслеживать загрузку интерфейсов для предотвращения их повторной загрузки. Ещё желательно при попытках пользователя вызвать уже загруженный интерфейс не только возвращать фокус уже открытому окну, но и передавать ему некоторые параметры, чтобы интерфейс мог скорректировать данные. Я так понимаю это уже через вызов public процедур надо делать. Пока что не удается вообще получить нормельную ссылку на интерфейс, а хотелось бы что-то вроде:  
Пишу так (файл Main.vih): 
Код: Выделить всё
objinterface ObjFace; 
end; 
vipinterface f_Card implements ObjFace; 
Далее фейс 1:
фейс 2:
Код: Выделить всё
#Include Main.vih
Interface f_Distrib
Var
  a: f_ResponseCard;
...
CmSomeEvent: If GetVipRef (a, 'f_Card') Message ('Ok') else Message ('False');
Перепробывал все функции из серии LoadVipInterface, GetVipInterface, GetVipRef, LoadVipRef,Assigned и т.п... половина из низ возвращает True, и при этом никаого интерфейса не открывается, другая половина ругается на то что поле не является ссылокой требуемого класса.
У кого нибудь есть пример того как это все работет? что же я делаю не так?
Если написать a: ObjFace, то функция GetVipRef прокатывает без ошибок, но она ничего не грузит!
 
			 
			
					
				Re: Как отследить, загружен ли интерфейс
				Добавлено: 03 май 2005, 13:39
				 Max_Fin
				Juve писал(а):
У кого нибудь есть пример того как это все работет? что же я делаю не так?
Код: Выделить всё
ObjInterface ObjFace;
методы
end;
VipInterface f_Card Implements ObjFace;
var A : ObjFace;
GetVipRef(A, 'f_Card');
По поводу не открывается, может просто нет такого метода
внутри объектного интерфейса RunInterface
 
			 
			
					
				Для примера
				Добавлено: 03 май 2005, 13:54
				 Max_Fin
				a.vih
Код: Выделить всё
ObjInterface MF_MyObj;
  procedure NewNastr;
  function Print: Boolean;
end;
VipInterface MF_My Implements MF_MyObj;
a.vip
Код: Выделить всё
PUBLIC procedure NewNastr;
{
  RunInterface(AAA);
}
PUBLIC function Print: Boolean;
{
...
}
aaaaaa.vip
Код: Выделить всё
var A : MF_MyObj;
....
cmInit:
{
GetVipRef(A, 'MF_My');
}
cmPick:
{
  A.NewNastr;
}
....
 
			 
			
					
				
				Добавлено: 03 май 2005, 16:37
				 Juve
				Спасибо большое, разобрался!   
 
Все работает, однако возник другой вопрос:
Можно ли в меню при вызове интерфейса написать не CmRunInterface а процедуру вызвать или еще чего. Т.е:
не так 
Код: Выделить всё
 
-'Распределение',cmRunInterface('f_Distrib');  
а что-то типа такого :
Код: Выделить всё
-'Распределение',Procedure aaa; ну или вызвать интерфейс  с параметрами
И вообще, где ловить это "cmRunInterface"
HandleEvent  в файле с меню не прокатывает  

 
			 
			
					
				
				Добавлено: 03 май 2005, 17:21
				 Max_Fin
				кстате, существует внутри объектных интерфейсов два события
cmOnVipLoad, cmOnVipUnload
это я так, что-то не совсем понимаю сути стоящей проблемы
по поводу обработки меню, какого меню?
если всплывающего меню самого объектного интерфейса, либо интрефейса из которого вызывается объектный тогда
- 'Распределение',cmMYObjStart,'Распределение, кажись',0,'',,sci1Esc;
cmMYObjStart - событие
			 
			
					
				
				Добавлено: 03 май 2005, 18:35
				 Juve
				эээ...ну не совсем....эти два события ловлю нормально, спасибо,не в них дело... я имею ввиду менюшку самого модуля, которое на Delphi MainMenu называется, что на Sec`е тут кажется...вот там мне и надо вызвать фейс так, чтобы потом если кто из другого фейса будет вызвать первый, то он не открыл его второй раз, а просто сделал активным первое окно фейса. Проблема решится если из этого меню можно будет вызвать не через CmRunInterface, а через А.ааа, как в твоем постинге
			 
			
					
				
				Добавлено: 04 май 2005, 09:10
				 Max_Fin
				Juve писал(а):а через А.ааа, как в твоем постинге
Но ведь A неизвестно что.
Из главного меню только через Run, больше ни как.
 
			 
			
					
				
				Добавлено: 04 май 2005, 14:33
				 Juve
				Ну вот я и хотел в обработчике CmRunInterface вызвать GetVipRef и определить А...потом вызвать А.ааа 
