Как отследить, загружен ли интерфейс

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

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

Ответить
Juve
Постоянный гость
Сообщения: 60
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Контактная информация:

Как отследить, загружен ли интерфейс

Сообщение Juve »

Необходимо отслеживать загрузку интерфейсов для предотвращения их повторной загрузки. Ещё желательно при попытках пользователя вызвать уже загруженный интерфейс не только возвращать фокус уже открытому окну, но и передавать ему некоторые параметры, чтобы интерфейс мог скорректировать данные. Я так понимаю это уже через вызов public процедур надо делать. Пока что не удается вообще получить нормельную ссылку на интерфейс, а хотелось бы что-то вроде:

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

 If Assigned(a) then a.Show и т.п... 
Пишу так (файл Main.vih):

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

objinterface ObjFace; 
end; 
vipinterface f_Card implements ObjFace; 
Далее фейс 1:

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

#Include Main.vih
Interface f_Card
фейс 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 прокатывает без ошибок, но она ничего не грузит!
Max_Fin
На пенсии
Сообщения: 797
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г. Тюмень
Контактная информация:

Re: Как отследить, загружен ли интерфейс

Сообщение Max_Fin »

Juve писал(а): У кого нибудь есть пример того как это все работет? что же я делаю не так?

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

ObjInterface ObjFace;
методы
end;

VipInterface f_Card Implements ObjFace;

var A : ObjFace;
GetVipRef(A, 'f_Card');
По поводу не открывается, может просто нет такого метода
внутри объектного интерфейса RunInterface
Max_Fin
На пенсии
Сообщения: 797
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г. Тюмень
Контактная информация:

Для примера

Сообщение 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;
}
....
Juve
Постоянный гость
Сообщения: 60
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Контактная информация:

Сообщение Juve »

Спасибо большое, разобрался! :)

Все работает, однако возник другой вопрос:

Можно ли в меню при вызове интерфейса написать не CmRunInterface а процедуру вызвать или еще чего. Т.е:

не так

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

 
-'Распределение',cmRunInterface('f_Distrib');  
а что-то типа такого :

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

-'Распределение',Procedure aaa; ну или вызвать интерфейс  с параметрами
И вообще, где ловить это "cmRunInterface"
HandleEvent в файле с меню не прокатывает :(
Max_Fin
На пенсии
Сообщения: 797
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г. Тюмень
Контактная информация:

Сообщение Max_Fin »

кстате, существует внутри объектных интерфейсов два события
cmOnVipLoad, cmOnVipUnload
это я так, что-то не совсем понимаю сути стоящей проблемы

по поводу обработки меню, какого меню?
если всплывающего меню самого объектного интерфейса, либо интрефейса из которого вызывается объектный тогда

- 'Распределение',cmMYObjStart,'Распределение, кажись',0,'',,sci1Esc;

cmMYObjStart - событие
Juve
Постоянный гость
Сообщения: 60
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Контактная информация:

Сообщение Juve »

эээ...ну не совсем....эти два события ловлю нормально, спасибо,не в них дело... я имею ввиду менюшку самого модуля, которое на Delphi MainMenu называется, что на Sec`е тут кажется...вот там мне и надо вызвать фейс так, чтобы потом если кто из другого фейса будет вызвать первый, то он не открыл его второй раз, а просто сделал активным первое окно фейса. Проблема решится если из этого меню можно будет вызвать не через CmRunInterface, а через А.ааа, как в твоем постинге
Max_Fin
На пенсии
Сообщения: 797
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г. Тюмень
Контактная информация:

Сообщение Max_Fin »

Juve писал(а):а через А.ааа, как в твоем постинге
Но ведь A неизвестно что.

Из главного меню только через Run, больше ни как.
Juve
Постоянный гость
Сообщения: 60
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Контактная информация:

Сообщение Juve »

Ну вот я и хотел в обработчике CmRunInterface вызвать GetVipRef и определить А...потом вызвать А.ааа :?
Ответить