85 lines
4.3 KiB
HTML
85 lines
4.3 KiB
HTML
<html>
|
|
|
|
<head>
|
|
<object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
|
|
<param name="Keyword" value="Objects">
|
|
</object>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
|
|
<title></title>
|
|
<link rel="StyleSheet" href="../../default.css">
|
|
</head>
|
|
|
|
<body>
|
|
<H1><span lang="ru">Ì</span>àññèâ <span lang="ru">âñåõ ãðàôè÷åñêèõ îáúåêòîâ
|
|
</span>Objects</H1>
|
|
<p> ìîäóëå <code>ABCObjects</code> îïðåäåëåí äèíàìè÷åñêèé ìàññèâ <code>Objects</code>,
|
|
êîòîðûé
|
|
õðàíèò âñå ñîçäàííûå ãðàôè÷åñêèå îáúåêòû. Îí ïðèíàäëåæèò ê òèïó <code>
|
|
ObjectsABCArray</code>, îïðåäåëåííîìó â <code>ABCObjects</code>. Äëÿ ìàññèâà
|
|
<code>Objects</code> îïðåäåëåíû âñåãî 2 îïåðàöèè:
|
|
<code>Objects.Count</code> âîçâðàùàåò êîëè÷åñòâî
|
|
ãðàôè÷åñêèõ îáúåêòîâ, à <code>Objects[i]</code>
|
|
âîçâðàùàåò <code>i</code>-òûé ãðàôè÷åñêèé îáúåêò (òèïà
|
|
<code>ObjectABC</code>, íóìåðàöèÿ îñóùåñòâëÿåòñÿ ñ 0).</p>
|
|
<p>Èñïîëüçîâàíèå ìàññèâà <code>Objects</code>
|
|
ïîçâîëÿåò åäèíîîáðàçíî îáðàùàòüñÿ êî âñåì ãðàôè÷åñêèì îáúåêòàì, âûçûâàÿ äëÿ íèõ
|
|
ëþáûå ìåòîäû è îáðàùàÿñü ê ëþáûì ñâîéñòâàì êëàññà <code>ObjectABC</code>. </p>
|
|
<p><b>Ïðèìåð 1.</b> Áðîóíîâñêîå äâèæåíèå îáúåêòîâ.</p>
|
|
<blockquote>
|
|
<p><code><b>uses</b> ABCObjects;</code></p>
|
|
<p><code><b>var</b> i:integer;</code></p>
|
|
<p><code><b>begin</b><br>
|
|
<b>for</b> i:=1 <b>to</b> 30 <b>do</b><br>
|
|
<b>new </b>CircleABC(Random(WindowWidth),Random(WindowHeight),20,clRandom);<br>
|
|
<b>while</b> True <b>do</b><br>
|
|
<b>for</b> i:=0 <b>to</b> Objects.Count-1 <b>do</b><br>
|
|
Objects[i].MoveOn(Random(3)-1,Random(3)-1);<br>
|
|
<b>end</b>. </code></p>
|
|
</blockquote>
|
|
<p>Â ýòîì ïðèìåðå ñîçäàåòñÿ 30 îáúåêòîâ <code>CircleABC</code>. Ïîñêîëüêó âñå
|
|
îíè ñîõðàíÿþòñÿ â ìàññèâå <code>Objects</code>, ïðè èõ ñîçäàíèè ðåçóëüòàò âûçîâà
|
|
êîíñòðóêòîðà íå ïðèñâàèâàåòñÿ íèêàêîé ïåðåìåííîé. Ïîñëå
|
|
ñîçäàíèÿ âñå îáúåêòû íà÷èíàþò ïåðåìåùàòüñÿ â áåñêîíå÷íîì öèêëå íà
|
|
ñëó÷àéíûé âåêòîð, ñîâåðøàÿ áðîóíîâñêîå äâèæåíèå.</p>
|
|
<p><b>Ïðèìåð 2.</b> Èçìåíåíèå ñâîéñòâ îáúåêòîâ çàäàííîãî òèïà.</p>
|
|
<blockquote>
|
|
<p><code><b>uses</b> ABCObjects;</code></p>
|
|
<p><code><b>var</b> i:integer;</code></p>
|
|
<p><code><b>begin</b><br>
|
|
<b>for</b> i:=1 <b>to</b> 30 <b>do</b><br>
|
|
<b>case</b> Random(2) <b>of</b><br>
|
|
0: <b>new</b> CircleABC(Random(WindowWidth),Random(WindowHeight),20,clRandom);<br>
|
|
1: <b>new </b>RegularPolygonABC(Random(WindowWidth),Random(WindowHeight),20,3,clRandom);<br>
|
|
<b>end</b>;<br>
|
|
<b>while</b> True <b>do</b><br>
|
|
<b>for</b> i:=0 <b>to</b> Objects.Count-1 <b>do</b><br>
|
|
<b>if</b> Objects[i] <b>is</b> RegularPolygonABC
|
|
<b>then</b><br>
|
|
RegularPolygonABC(Objects[i]).Angle := RegularPolygonABC(Objects[i]).Angle + 1;<br>
|
|
<b>end</b>.</code></p>
|
|
</blockquote>
|
|
<p>Â ýòîì ïðèìåðå ñîçäàåòñÿ 30 îáúåêòîâ <code>CircleABC</code> èëè <code>
|
|
RegularPolygonABC</code>. Çàòåì â áåñêîíå÷íîì öèêëå âðàùàþòñÿ òîëüêî îáúåêòû
|
|
<code>RegularPolygonABC</code>. Âðàùåíèå äîñòèãàåòñÿ óâåëè÷åíèåì ñâîéñòâà <code>
|
|
Angle</code>, êîòîðîå îïðåäåëåíî òîëüêî â êëàññå <code>RegularPolygonABC</code>.
|
|
Äëÿ óñòàíîâêè ïðèíàäëåæíîñòè îáúåêòà ê êëàññó <code>RegularPolygonABC</code>
|
|
èñïîëüçóåòñÿ îïåðàöèÿ <b><code>is</code></b>, ïîñëå ÷åãî îáúåêò <code>Objects</code><code>[i]</code>
|
|
ïðåîáðàçóåòñÿ ê òèïó <code>RegularPolygonABC</code> ïðè ïîìîùè îïåðàöèè
|
|
ïðèâåäåíèÿ òèïà.</p>
|
|
<p><b>Ïðèìåð 3.</b> Óäàëåíèå âñåõ ãðàôè÷åñêèõ îáúåêòîâ, ïåðåñåêøèõñÿ ñ îáúåêòîì
|
|
<code>p</code>:</p>
|
|
<blockquote>
|
|
<p><code><b>for</b> i:=Objects.Count-1 <b>downto</b>
|
|
0 <b>do</b><br>
|
|
<b>if </b>(Objects[i]<>p) <b>and</b> (p.Intersects(Objects[i]) <b>then</b><br>
|
|
Objects[i].Destroy;</code></p>
|
|
</blockquote>
|
|
<p> èãðàõ ÷àñòî íóæíî óäàëèòü âñå ãðàôè÷åñêèå îáúåêòû, êîòîðûå "íàñòèã" îáúåêò
|
|
<code>p</code>. Äëÿ ýòîãî ñëåäóåò ïåðåáðàòü âñå ãðàôè÷åñêèå îáúåêòû çà
|
|
èñêëþ÷åíèåì ñàìîãî <code>p</code> è ïðîâåðèòü èõ íà ïðåäìåò ïåðåñå÷åíèÿ ñ <code>
|
|
p</code>. Óäàëåíèå îñóùåñòâëÿåòñÿ âûçîâîì äåñòðóêòîðà ñîîòâåòñòâóþùåãî îáúåêòà.
|
|
Îòìåòèì òàêæå, ÷òî â ðåçóëüòàòå óäàëåíèÿ êîëè÷åñòâî îáúåêòîâ óìåíüøàåòñÿ,
|
|
ïîýòîìó ñëåäóåò ïåðåáèðàòü îáúåêòû îò êîíöà ê íà÷àëó.</p>
|
|
</body>
|
|
|
|
</html> |