Страница 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 и определить А...потом вызвать А.ааа