OberonCore https://forum.oberoncore.ru/ |
|
Простейший пример нового элемента управления https://forum.oberoncore.ru/viewtopic.php?f=35&t=4166 |
Страница 1 из 1 |
Автор: | Иван Денисов [ Четверг, 22 Ноябрь, 2012 07:06 ] |
Заголовок сообщения: | Простейший пример нового элемента управления |
Каркас Блекбокса позволяет расширять доступные элементы управления, которые возможно затем везде использовать в формах и составных документах. Элемент управления связывается с данными в вашем модуле, и может отображать данные графически. Ниже предлагаю простой пример элемента управления, отображающего связанную с ним переменную типа 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". |
Автор: | adva [ Среда, 19 Март, 2014 08:50 ] |
Заголовок сообщения: | Re: Простейший пример нового элемента управления |
Я правильно понял, что создание элемента управления делается только в коде, никаких форм при этом не используется? Вопрос вообще про элементы управления, не обязательно про конкретный |
Автор: | Иван Кузьмицкий [ Среда, 19 Март, 2014 10:44 ] |
Заголовок сообщения: | Re: Простейший пример нового элемента управления |
adva писал(а): Я правильно понял, что создание элемента управления делается только в коде, никаких форм при этом не используется? Вопрос вообще про элементы управления, не обязательно про конкретный Блэкбокс - документоориентированная среда. В документ можно встраивать любые отображения. Контролы тоже являются отображениями. И формы - тоже отображения, контейнерного типа. На формах можно размещать любые контролы. Эталон ББ имеет стандартный набор контролов, которые можно бросать на форму и визуально корректировать их геометрию.Если говорить про создание своего типа контрола, то это только программно, расширяя тип стандартного контрола. Если говорить про порождение нового экземпляра контрола и встраивание его в визуальный контейнер, то тут цепочка такая - надо выделить память под контрол и разместить его в системной очереди отображений. Дальше можно использовать команды каркаса по вытаскиванию отображения из очереди. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |