OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Понедельник, 21 Октябрь, 2019 06:48

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
СообщениеДобавлено: Вторник, 07 Май, 2013 11:33 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2931
Откуда: г. Ярославль
Есть понятие процедуры-охранника (или процедуры-предохранителя, как угодно). Эта процедура семантически привязана к одному контролу. Но иногда удобно обрабатывать одним охранником сразу группу контролов, при этом возникает потребность различать, какой контрол в данном случае "предохраняется".

В документации (в исходнике такого нет) модуля Dialog объявлена сигнатура расширенного охранника
Код:
PROCEDURE (n: INTEGER; VAR par: Par);
но как им пользоваться, не указано (по крайней мере, мне не удалось найти в документации ничего подобного).

Такая сигнатура используется в Controls, а используемый в редакторе свойств синтаксис вызова охранника выглядит так:
Код:
PrivInteractors.Guard(1)
Цифра, указанная в скобках, передаётся в процедуру расширенного охранника как параметр n и это даёт возможность различать контролы.

P.S. Пример использования я обнаружил в CpcBookmarks


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 07 Май, 2013 11:43 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2316
Откуда: Россия, Томск
Иван Кузьмицкий писал(а):
P.S. Пример использования я обнаружил в CpcBookmarks
Хе-хе : )


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 07 Май, 2013 15:37 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2602
Откуда: Россия, Ярославль
Уведомитель тоже такое поддерживает:
Цитата:
PROCEDURE DefaultNotifier* (n: INTEGER; op, from, to: INTEGER);


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 08 Май, 2013 20:08 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4520
Откуда: Россия, Орёл
Кх... кому неожиданная находка, кому --- неожиданный вопрос. :) вот ещё пример: http://oberoncore.ru/wiki/blackbox/ex/c ... ean_as_set


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 04 Июнь, 2013 13:06 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2602
Откуда: Россия, Ярославль
Код из 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 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2931
Откуда: г. Ярославль
В документации к 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.

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.
Это было неожиданно. Но на самом деле, это невозможно сделать, так как проверка интерактора для CheckBox делается только для BOOLEAN и SET:
Код:
PROCEDURE (c: CheckBox) CheckLink (VAR ok: BOOLEAN);
BEGIN
   ok := (c.item.typ = Meta.boolTyp) OR (c.item.typ = Meta.setTyp)
END CheckLink;
А жаль...


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2019, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB