Запуск динамически определяемого интерфейса

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

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

Ответить
Friendlyman
Постоянный гость
Сообщения: 74
Зарегистрирован: 23 июн 2007, 23:07
Откуда: ТопСофт, Минск

Запуск динамически определяемого интерфейса

Сообщение Friendlyman »

Написал код (упростил пример для форума):

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

  
    var sIName : string;
    sIName := 'L_MOL::GETMOL';
    RunInterface(sIName);
при компилировании sIName воспринимается как имя интерфеса.
И при выполнении говорит, что не находит интерфейс с именем sIName.
Хотелось бы, чтобы при исполнении кода запускался интерфейс L_MOL::GETMOL, а не пыталось запустить интерфес с именем sIName.

Как можно решить проблему?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

RunAnyView('INTERFACE ???????',false); попробуйте
есть еще RunInterfaceNoModal. Ну или какое то арифм.выражение, а то в vipprogr.chm

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

newInterface : string - идентификатор интерфейса, который запускается при вызове функции. Идентификатор, как правило, в кавычки не заключается.

edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

runanyview('interface L_MOL::GETMOL',true) даже по ctrl+F4 сработало.
Friendlyman
Постоянный гость
Сообщения: 74
Зарегистрирован: 23 июн 2007, 23:07
Откуда: ТопСофт, Минск

Сообщение Friendlyman »

Круто. Спасибо!
Тут еще ядерщики-атлантисты высказали мнение, что для этой задачи нужно объектный интерфейс использовать и несколько его реализаций...
Но это слегка сложнее будет написать, чем предложенный Вами вариант!
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

ну для объектных можно типа этого делать
LoadImplementationList('F_userreport::IDir_ExpImp', 'Dir_ExpImp_');
var k: integer;
var wstr:string ;
vdict.w_ImplementationCount:=GetImplementationCount
for (k := 0; k < vdict.w_ImplementationCount; Inc(k))
{ if k+1+#COL_TABLR_IN=I
{ wstr := GetImplementationName(k);
_Try
{ //message(wstr)
if not NullVipRef(PDir_ExpIMP)
FreeVipInterface(PDir_ExpIMP);
LoadVipRef(PDir_ExpIMP, wstr);
Dict_GetDocSpis:=PDir_ExpIMP.GetTableName+';'+PDir_ExpIMP.GetTableTitle ;
}
_except
on ExObjIfcNoImpl: {}

}
}
Screw
Слесарь-системщик
Сообщения: 304
Зарегистрирован: 29 мар 2005, 17:49
Откуда: р.Беларусь, Унитарное предприятие "ТОП СОФТ"
Контактная информация:

Сообщение Screw »

Эта штука нужна только если от используемой реализации требуется какое-то стандартное поведение, описываемое протоколом, т.е., объектным интерфейсом. Например, нужно, чтобы все означенные реализации должны предоставлять метод для расчета (чего-то) или печати.

Для запуска произвольного интерфейса достаточно и RunAnyView.
Виталий
zna
Местный житель
Сообщения: 552
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Челябинск
Контактная информация:

Re: Запуск динамически определяемого интерфейса

Сообщение zna »

Здравствуйте, коллеги.
Подскажите, пож., параметры интерфейса L_MOL::GETMOL. Как получить выбранного МОЛ? В Pick не возвращает.
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Запуск динамически определяемого интерфейса

Сообщение Den »

.\exe\GalDoc\L_MOL.chm
zna
Местный житель
Сообщения: 552
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Челябинск
Контактная информация:

Re: Запуск динамически определяемого интерфейса

Сообщение zna »

Оп, точно!
Благодарю!
Ответить