86 lines
3.8 KiB
HTML
86 lines
3.8 KiB
HTML
<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> |