OberonCore https://forum.oberoncore.ru/ |
|
Нерасширяемый FormControllers.Focus https://forum.oberoncore.ru/viewtopic.php?f=127&t=6194 |
Страница 1 из 1 |
Автор: | Илья Ермаков [ Понедельник, 04 Декабрь, 2017 14:56 ] |
Заголовок сообщения: | Нерасширяемый FormControllers.Focus |
Ср.: TextControllers Код: PROCEDURE Focus* (): Controller; VAR v: Views.View; c: Containers.Controller; BEGIN v := Controllers.FocusView(); IF (v # NIL) & (v IS TextViews.View) THEN c := v(TextViews.View).ThisController(); IF (c # NIL) & (c IS Controller) THEN RETURN c(Controller) ELSE RETURN NIL END ELSE RETURN NIL END END Focus; Всё ОК. В формах же, видимо, застрял какой-то более древний вариант (там есть древности в формах): FormControllers Код: PollFocusMsg = RECORD (Controllers.PollFocusMsg) c: Controller END; PROCEDURE Focus* (): Controller; VAR msg: PollFocusMsg; BEGIN msg.c := NIL; Controllers.Forward(msg); RETURN msg.c END Focus; Т.е. Focus() признаёт только стандартную реализацию контроллера форм. Нужно бы в сборках переделать. Пока придётся в своей реализации реагировать на PollFocusMsg по модулю тега типа и выставлять поле c через SYSTEM. |
Автор: | Trurl [ Понедельник, 04 Декабрь, 2017 15:27 ] |
Заголовок сообщения: | Re: Нерасширяемый FormControllers.Focus |
"Ничего не понимаю". Что переделать и зачем? |
Автор: | Илья Ермаков [ Вторник, 05 Декабрь, 2017 14:43 ] |
Заголовок сообщения: | Re: Нерасширяемый FormControllers.Focus |
У меня другие формы (и View, и Model, и Controller). Все наследники базовых типов. FormControllers.Focus даёт на них NIL (и некоторые стандартные тулзы для форм "не признают"). Варианты изменения: 1) Экспортировать это внутреннее сообщение из FormControllers, чтоб другие реализации тоже могли его обрабатывать. 2) Переделать Focus() так, как он обычно и делается (пример - из TextControllers). |
Автор: | Trurl [ Вторник, 05 Декабрь, 2017 16:07 ] |
Заголовок сообщения: | Re: Нерасширяемый FormControllers.Focus |
Ага, теперь понятно. Возможно, предполагалось, что FormControllers.Focus должно возвращать только стандартные формы. Nогда есть еще вариант: перенести HandleCtrlMsg из StdController в Controller. А вот насчет "обычно и делается" не согласен, так только в TextControllers. |
Автор: | Trurl [ Вторник, 05 Декабрь, 2017 16:12 ] |
Заголовок сообщения: | Re: Нерасширяемый FormControllers.Focus |
Кстати, у нас же есть Containers.Focus. А поскольку формы и тексты суть контейнеры, вот такая процедура подойдет для обоих Код: PROCEDURE Focus* (): Controller;
VAR c: Containers.Controller; BEGIN c := Containers.Focus(); IF (c # NIL) & (c IS Controller) THEN RETURN c(Controller) ELSE RETURN NIL END END Focus; |
Автор: | Илья Ермаков [ Среда, 06 Декабрь, 2017 20:03 ] |
Заголовок сообщения: | Re: Нерасширяемый FormControllers.Focus |
Ну да. Но суть предложения - внести какие-то изменения в FotmControllers. Пока пришлось использовать SYSTEM в своём контроллере для совместимости Я думаю, что это у них какой-то древний хвост. Формы у них содержат какие-то рудименты в разных местах. |
Автор: | Trurl [ Суббота, 09 Декабрь, 2017 13:15 ] |
Заголовок сообщения: | Re: Нерасширяемый FormControllers.Focus |
Рудиментов там везде полно, но вот насчет данного случая сомневаюсь. Ведь если внести изменения, то эта фунция становится и ненужной. Проверить, что контролер нужного типа любой модуль может и сам. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |