/
n-dimens
/
pascalabcnet
Обзор
Документация
Войти
/
n-dimens
/
pascalabcnet
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
PABCNetHelp/Tutorials/ABCObjects/ABCContainersOverview.html
86 строк
5 KB
samuraiGH
adding working-tree-encoding attribute (#3325)
07 ноя 2025, 16:12
Не верифицирован
07 ноя 2025, 16:12
cf1fd29
Код
Авторство
О чём код?
<html> <head> <object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param name="Keyword" value=""> </object> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <title></title> <link rel="StyleSheet" href="../../default.css"> </head> <body> <H1>ABCObjects: контейнеры графических объектов</H1> <p>Класс <code><a href="../../PABCUnits/ABCObjects/gabc_ContainerABC.html">ContainerABC</a></code> представляет собой контейнер графических объектов. Он также является потомком <code>ObjectABC</code>, но при создании не содержит ни одного объекта. Он добавляет следующий интерфейс:</p> <blockquote> <p><code><b>procedure</b> Add(g: ObjectABC);<br> <b>property</b> Count: integer; // количество объектов<br> <b>property</b> Objects[i: integer]: ObjectABC; // i-тый объект</code></p> </blockquote> <p>При масштабировании <code>ContainerABC</code> производится масштабирование всех входящих в него объектов. При добавлении объекта в <code>ContainerABC</code> его свойство <code>Owner</code> становится равным этому <code>ContainerABC</code>. При присваивании свойству <code>Owner</code> объекта его владелец меняется, при этом объект перерисовывается как принадлежащий новому владельцу. При присваивании свойству <code>Owner</code> объекта значения <b><code>nil</code></b> он перестает иметь владельца и отображается непосредственно в графическом окне.</p> <p>Рассмотрим следующую программу:</p> <blockquote> <p><code><b>uses</b> ABCObjects,GraphABC;</code></p> <p><code><b>var</b><br> c1,c2: ContainerABC;<br> r: CircleABC;</code></p> <p><code><b>begin</b><br> SetWindowSize(300,300);<br> c1 := <b>new</b> ContainerABC(50,30);<br> c1.Add(<b>new </b>RectangleABC(0,0,200,100,clGreen));<br> r := <b> new </b>CircleABC(15,15,70,clYellow);<br> <b>end</b>.</code></p> </blockquote> <p>После ее запуска графический экран имеет вид:</p> <p><img border="0" src="images/Cont1.PNG" width="308" height="332"></p> <p>Контейнер <code>c1</code> содержит зеленый прямоугольник, а объект r не имеет владельца (<code>r.Owner=nil</code>). Нетрудно убедиться, что <code>ObjectsCount=2</code> (контейнер и круг), а <code>c1.Count=1</code>.</p> <p>Добавим круг в контейнер, дописав в конец программы строчку</p> <blockquote> <p><code>c1.Add(r);</code></p> </blockquote> <p>После запуска программы графический экран примет вид:</p> <p><img border="0" src="images/Cont2.PNG" width="308" height="332"></p> <p>Круг <code>r</code> теперь принадлежит контейнеру (<code>r.Owner=с2</code>), <code> ObjectsCount=1</code> (только контейнер), а <code> c1.Count=2</code>. Кроме этого, координаты круга пересчитываются относительно координат контейнера-владельца (они по-прежнему равны (15,15), но относительно левого верхнего угла контейнера <code>c1</code>).</p> <p>Такой же эффект можно было получить от оператора</p> <blockquote> <p><code>r.Owner := c1;</code></p> </blockquote> <p>Создадим второй контейнер <code>c2</code> и поменяем владельца у <code>r</code> на <code>c2</code>. Для этого допишем в конец строки:</p> <blockquote> <p><code>c2 := <b>new</b> ContainerABC(50,160);<br> c2.Add(<b>new</b> RectangleABC(0,0,200,100,clMoneyGreen));<br> r.Owner := c2;</code></p> </blockquote> <p>После запуска программы графический экран примет вид:</p> <p><img border="0" src="images/Cont3.PNG" width="308" height="332"></p> <p>Как мы видим, круг r поменял владельца, и теперь имеет координаты (15,15), но относительно левого верхнего угла нового владельца <code>c2</code>.</p> <p>Если вместо строчки <code>r.Owner:=c2</code>; написать <code>r.Owner:=<b>nil</b></code>; , то круг <code>r</code> потеряет владельца и снова будет позиционироваться относительно левого верхнего угла экрана:</p> <p><img border="0" src="images/Cont4.PNG" width="308" height="332"></p> </body> </html>