OberonCore https://forum.oberoncore.ru/ |
|
Неожиданные или недокументированные находки https://forum.oberoncore.ru/viewtopic.php?f=1&t=4344 |
Страница 1 из 1 |
Автор: | Иван Кузьмицкий [ Вторник, 07 Май, 2013 11:33 ] |
Заголовок сообщения: | Неожиданные или недокументированные находки |
Есть понятие процедуры-охранника (или процедуры-предохранителя, как угодно). Эта процедура семантически привязана к одному контролу. Но иногда удобно обрабатывать одним охранником сразу группу контролов, при этом возникает потребность различать, какой контрол в данном случае "предохраняется". В документации (в исходнике такого нет) модуля Dialog объявлена сигнатура расширенного охранника Код: PROCEDURE (n: INTEGER; VAR par: Par); но как им пользоваться, не указано (по крайней мере, мне не удалось найти в документации ничего подобного).Такая сигнатура используется в Controls, а используемый в редакторе свойств синтаксис вызова охранника выглядит так: Код: PrivInteractors.Guard(1) Цифра, указанная в скобках, передаётся в процедуру расширенного охранника как параметр n и это даёт возможность различать контролы.P.S. Пример использования я обнаружил в CpcBookmarks |
Автор: | Александр Ильин [ Вторник, 07 Май, 2013 11:43 ] |
Заголовок сообщения: | Re: Неожиданные или недокументированные находки |
Иван Кузьмицкий писал(а): P.S. Пример использования я обнаружил в CpcBookmarks Хе-хе : )
|
Автор: | Пётр Кушнир [ Вторник, 07 Май, 2013 15:37 ] |
Заголовок сообщения: | Re: Неожиданные или недокументированные находки |
Уведомитель тоже такое поддерживает: Цитата: PROCEDURE DefaultNotifier* (n: INTEGER; op, from, to: INTEGER);
|
Автор: | Евгений Темиргалеев [ Среда, 08 Май, 2013 20:08 ] |
Заголовок сообщения: | Re: Неожиданные или недокументированные находки |
Кх... кому неожиданная находка, кому --- неожиданный вопрос. вот ещё пример: http://oberoncore.ru/wiki/blackbox/ex/c ... ean_as_set |
Автор: | Пётр Кушнир [ Вторник, 04 Июнь, 2013 13:06 ] |
Заголовок сообщения: | Re: Неожиданные или недокументированные находки |
Код из StdLog: Код: PROCEDURE* Guard (o: ANYPTR): BOOLEAN; BEGIN RETURN (o # NIL) & ~( (o IS TextModels.Model) & (o = text) OR (o IS Stores.Domain) & (o = text.Domain()) OR (o IS TextViews.View) & (o(TextViews.View).ThisModel() = text) ) END Guard; PROCEDURE* ClearBuf; VAR subBuf: TextModels.Model; BEGIN subBuf := subOut.rider.Base(); subBuf.Delete(0, subBuf.Length()) END ClearBuf; PROCEDURE* FlushBuf; VAR buf: TextModels.Model; BEGIN buf := subOut.rider.Base(); IF buf.Length() > 0 THEN IF ~Log.synch THEN Open() END; text.Append(buf) END END FlushBuf; PROCEDURE* SubFlush; BEGIN IF Log.synch THEN FlushBuf; IF Log.force THEN Views.RestoreDomain(text.Domain()) END END; END SubFlush; Вот ещё одна необычная штука. Обратите внимание на звёздочки. |
Автор: | Иван Кузьмицкий [ Среда, 05 Июнь, 2013 13:26 ] |
Заголовок сообщения: | Re: Неожиданные или недокументированные находки |
В документации к Controls написано, что контрол CheckBox можно связывать с интерактором типа Dialog.Selection: Цитата: A check box can also be linked to a Dialog.Selection field or variable. The level property then indicates which element of the val set of the selection is inspected. Это было неожиданно. Но на самом деле, это невозможно сделать, так как проверка интерактора для CheckBox делается только для BOOLEAN и SET:Additional property: level if a check box is linked to a set or to a Dialog.Selection variable, then the level field indicates which set element is displayed by the control. Код: PROCEDURE (c: CheckBox) CheckLink (VAR ok: BOOLEAN); А жаль...
BEGIN ok := (c.item.typ = Meta.boolTyp) OR (c.item.typ = Meta.setTyp) END CheckLink; |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |