OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 22 Январь, 2019 11:01

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




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
СообщениеДобавлено: Четверг, 22 Ноябрь, 2012 07:06 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2247
Каркас Блекбокса позволяет расширять доступные элементы управления, которые возможно затем везде использовать в формах и составных документах.

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

Ниже предлагаю простой пример элемента управления, отображающего связанную с ним переменную типа INTEGER в виде круга цвета Ports.color = переменной.

Код:
MODULE LumiInd;

   IMPORT Controls, Meta, Ports, Properties, Views;

   TYPE
      Indicator = POINTER TO RECORD (Controls.Control) END;

   PROCEDURE (ind: Indicator) Restore (f: Views.Frame; l, t, r, b: INTEGER);
   BEGIN
      IF ind.item.Valid() & ~ ind.disabled THEN
         f.DrawOval(0, 0, 20 * f.dot, 20 * f.dot, - 1, ind.item.IntVal())
      END;
      IF ind.disabled THEN
         f.DrawOval(0, 0, 20 * f.dot, 20 * f.dot, f.dot, Ports.grey50)
      ELSE
         f.DrawOval(0, 0, 20 * f.dot, 20 * f.dot, f.dot, Ports.black)
      END
   END Restore;

   PROCEDURE (ind: Indicator) HandlePropMsg2 (VAR msg: Properties.Message);
   BEGIN
      WITH msg: Properties.SizePref DO
         IF (msg.w = Views.undefined) OR (msg.h = Views.undefined) THEN
            msg.w := 15 * Ports.point; msg.h := 15 * Ports.point
         END
      ELSE END
   END HandlePropMsg2;

   PROCEDURE (ind: Indicator) Update (f: Views.Frame; op, from, to: INTEGER);
   BEGIN
      ind.Restore(f, f.l, f.t, f.r, f.b)
   END Update;

   PROCEDURE (ind: Indicator) CheckLink (VAR ok: BOOLEAN);
   BEGIN
      ok := ind.item.typ = Meta.intTyp
   END CheckLink;

   PROCEDURE NewControl (p: Controls.Prop): Views.View;
      VAR ind: Indicator;
   BEGIN
      NEW(ind);
      Controls.OpenLink(ind, p);
      RETURN ind
   END NewControl;

   PROCEDURE Deposit*;
      VAR p: Controls.Prop;
   BEGIN
      NEW(p); p.link := ""; p.label := ""; p.guard := ""; p.notifier := "";
      Views.Deposit(NewControl(p))
   END Deposit;

END LumiInd.


Чтобы вставить элемент управления в форму или документ, необходимо выполнить команду "LumiInd.Deposit; StdCmds.PasteView".


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 19 Март, 2014 08:50 

Зарегистрирован: Суббота, 16 Февраль, 2008 07:58
Сообщения: 340
Откуда: Россия, Стерлитамак
Я правильно понял, что создание элемента управления делается только в коде, никаких форм при этом не используется? Вопрос вообще про элементы управления, не обязательно про конкретный


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 19 Март, 2014 10:44 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2930
Откуда: г. Ярославль
adva писал(а):
Я правильно понял, что создание элемента управления делается только в коде, никаких форм при этом не используется? Вопрос вообще про элементы управления, не обязательно про конкретный
Блэкбокс - документоориентированная среда. В документ можно встраивать любые отображения. Контролы тоже являются отображениями. И формы - тоже отображения, контейнерного типа. На формах можно размещать любые контролы. Эталон ББ имеет стандартный набор контролов, которые можно бросать на форму и визуально корректировать их геометрию.

Если говорить про создание своего типа контрола, то это только программно, расширяя тип стандартного контрола. Если говорить про порождение нового экземпляра контрола и встраивание его в визуальный контейнер, то тут цепочка такая - надо выделить память под контрол и разместить его в системной очереди отображений. Дальше можно использовать команды каркаса по вытаскиванию отображения из очереди.


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

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


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

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


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

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