А вот такой вопрос :
Как средствами Клары (ну, скажем, С55) сымитировать вызов CallBack-рутинок ?
Что имеется ввиду.
Допустим, есть N пусть оконных процедурок (W1 - Wn).
В каждой из них надо выполнить определенный один и тот же код.
Естественно оформить этот код в виде внешней процедуры (пусть PROC1).
НО! В каждой из Wi надо проделать что-то сугубо"личное" _внутри_PROC1 (например, если в Wi есть кнопка, то сделать ?Button{Prop:Text}='ЭТО КНОПКА"}, а если есть String, то Prop = "ЭТО НЕ КНОПКА, а СТРОКА"). Посьба не заостряться на функционале этой "личной" обработки.
Хотелось бы в каждой из Wi определить ряд рутинок (R1-Rk), заполнить адресами Rj некоторый глобальный вектор или очередь и вызвать PROC1, в коде которой предусмотрено :
Если элемент вектора ненулевой, то передать управление по этому адресу.
Не могу сообразить КАК :
1 передать управление
2 куда вернется управление после Rj (надо в PROC1)
С уважением,
Анатолий
(Добавление)
проще через типовой класс, а не через процедуру:
Код: Выделить всё
myClassType CLASS
W &Window
! необходимый набор свойств
Init PROCEDURE(Window W)
Init PROCEDURE(),VIRTUAL
END
myClassType.Init PROCEDURE(Window W)
CODE
SELF.W &= W
SELF.Init
myClassType.Init PROCEDURE
CODE
!общая подготовка для всех окон
Код: Выделить всё
myClass CLASS(myClassType)
Init PROCEDURE(),VIRTUAL
END
myClass.Init(Window)
реализуешь виртуальный метод в EMBED Local Procedures:
Код: Выделить всё
myClass.Init PROCEDURE
CODE
! тут своя подготовка конкретно для каждого окна
PARENT.Init ! общая подгтовка
andrew@arsis.ru
http://mavcla.arsis.ru (MAV Direct ODBC)
ICQ: 10659412
Yahoo group: clarion@yahoogroups.com
(Добавление)
Вопрос честно говоря не очень понял, но рискну ответить как понял.
**************************************
Глобально описываем некий класс
Код: Выделить всё
MyProcClass CLASS,TYPE
Proc PROCEDURE,VIRTUAL
END
Код: Выделить всё
MyProcClass.Proc PROCEDURE
CODE
Код: Выделить всё
MyWProc CLASS(MyProcClass)
Proc PROCEDURE,VIRTUAL
END
Код: Выделить всё
MyWProc.Proc PROCEDURE
CODE
DO Routine1 ! Некая уникальная для Wn обработка
PARENT.Proc() ! Вызываем родительский метод, содержащий некий общий код.
DO Routine2 ! Некая уникальная для Wn обработка
**************************************
ООП, однако. Угадал с ответом?
Удачи!
__________________________________
Владимир Якимченко (IСQ 16 993 194)
Нет, не угадал (или я не вижу)
Надо
Код: Выделить всё
Wi Procedure
code
do PROC1
R1 Routine
..............
R2 Routine
..............
Rk Routine
PROC1 Routine !!!!!!!!!!!!!!!!!!
common code 1
do R1
common code2
do R2
common code 3
........................
.......................
do Rk
common code k+1
! end PROC1
end !Wi
На счет разбить PROC1 на PROC1 - PROCk - я в курсе, но не интересно.
Спасибо, аналогично.
Анатолий.
Наверное, не видишьНет, не угадал (или я не вижу)
Ну аналогично все, только вместо рутин Rn виртуальные методы
**************************************
Глобально (или в данных модуля) описываем некий класс
Код: Выделить всё
MyProcClass CLASS,TYPE
PROC1 PROCEDURE
R1 PROCEDURE,VIRTUAL
R2 PROCEDURE,VIRTUAL
R3 PROCEDURE,VIRTUAL
...
Rk PROCEDURE,VIRTUAL
END
Код: Выделить всё
MyProcClass.PROC1 PROCEDURE
CODE
common code 1
SELF.R1()
common code2
SELF.R2()
common code 3
........................
.......................
SELF.Rk()
common code k+1
Код: Выделить всё
MyProcClass.Rk PROCEDURE
CODE
Код: Выделить всё
MyWProc CLASS(MyProcClass)
R1 PROCEDURE,VIRTUAL
R2 PROCEDURE,VIRTUAL
R3 PROCEDURE,VIRTUAL
...
Rk PROCEDURE,VIRTUAL
END
Ну и собственно где нужно вызываем MyWProc.PROC1()
**************************************
Теперь понятно?
Удачи!
__________________________________
Владимир Якимченко
Написал: ClaList(2)