Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «ОписаниС языка PascalABC.NETΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 54

Автор W Cat

procedure Move; override;

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ графичСский ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π° Π²Π΅ΠΊΡ‚ΠΎΡ€, Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΉ свойствами dx, dy

procedure Scale(f: real); override;

ΠœΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅Ρ‚ графичСский ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² f Ρ€Π°Π· (f>1 - ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅, 0<f<1 - ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅)

procedure ToFront;

ΠŸΠ΅Ρ€Π΅Π½ΠΎΡΠΈΡ‚ графичСский ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π° ΠΏΠ΅Ρ€Π΅Π΄Π½ΠΈΠΉ ΠΏΠ»Π°Π½

procedure ToBack;

ΠŸΠ΅Ρ€Π΅Π½ΠΎΡΠΈΡ‚ графичСский ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π° Π·Π°Π΄Π½ΠΈΠΉ ΠΏΠ»Π°Π½

function Bounds: System.Drawing.Rectangle;

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ графичСского ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

function PtInside(x,y: integer): boolean; override;

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ True, Ссли Ρ‚ΠΎΡ‡ΠΊΠ° (x, y) находится Π²Π½ΡƒΡ‚Ρ€ΠΈ графичСского ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΈ False Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС

function Intersect(g: ObjectABC): boolean;

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ True, Ссли ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ графичСского ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° пСрСсСкаСтся с ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ графичСского ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° g, ΠΈ False Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС. Π‘Π΅Π»Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚ считаСтся ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΌ ΠΈ Π½Π΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ

function IntersectRect(r: System.Drawing.Rectangle): boolean;

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ True, Ссли ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ графичСского ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° пСрСсСкаСтся ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠΌ r, ΠΈ False Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС

function Clone0: ObjectABC; override;

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠ»ΠΎΠ½ графичСского ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

procedure Draw(x,y: integer; g: Graphics); override;

ЗащищСнная. НС вызываСтся явно. ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ΡΡ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ графичСского класса. РисуСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ g: Graphics

destructor Destroy;

Π£Π½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°Π΅Ρ‚ графичСский ΠΎΠ±ΡŠΠ΅ΠΊΡ‚

ΠœΡƒΠ»ΡŒΡ‚ΠΈΡ€ΠΈΡΡƒΠ½ΠΊΠΈ

ΠœΡƒΠ»ΡŒΡ‚ΠΈΡ€ΠΈΡΡƒΠ½ΠΎΠΊ прСдставляСт собой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса MultiPictureABC ΠΈ содСрТит нСсколько ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° (ΠΊΠ°Π΄Ρ€Ρ‹ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΡ€ΠΈΡΡƒΠ½ΠΊΠ°), ΠΎΠ΄Π½Π° ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… отобраТаСтся Π½Π° экранС.

ΠœΡƒΠ»ΡŒΡ‚ΠΈΡ€ΠΈΡΡƒΠ½ΠΊΠΈ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для графичСских ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… нСсколько состояний. НапримСр, для ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² ΠΌΡƒΠ»ΡŒΡ‚ΠΈΡ€ΠΈΡΡƒΠ½ΠΊΠ΅ хранятся всС Π΅Π³ΠΎ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Ρ‹: Π²Π²Π΅Ρ€Ρ…, Π²Π½ΠΈΠ·, Π²ΠΏΡ€Π°Π²ΠΎ, Π²Π»Π΅Π²ΠΎ. ΠœΡƒΠ»ΡŒΡ‚ΠΈΡ€ΠΈΡΡƒΠ½ΠΊΠΈ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ для создания спрайтов - Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… рисунков с автоматичСски ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠΌΠΈΡΡ ΠΊΠ°Π΄Ρ€Π°ΠΌΠΈ. Однако, для спрайтов ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ класс SpriteABC, располоТСнный Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ ABCSprites.

Рассмотрим созданиС ΠΌΡƒΠ»ΡŒΡ‚ΠΈΡ€ΠΈΡΡƒΠ½ΠΊΠ° ΠΈΠ· Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… рисунков, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… находится Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅:

uses ABCObjects,GraphABC;

var p: MultiPictureABC;

begin

p := new MultiPictureABC(50,50,'multi1.bmp');

p.Add('multi2.bmp');

p.Add('multi3.bmp');

p.Add('multi2.bmp');

end.

ПослС запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² графичСском ΠΎΠΊΠ½Π΅ отобраТаСтся рисунок ΠΈΠ· ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΊΠ°Π΄Ρ€Π°.

Для смСны рисунка достаточно ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ свойство CurrentPicture:

p.CurrentPicture := 2;

МоТно Ρ‚Π°ΠΊΠΆΠ΅ цикличСски ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ рисунку:

p.NextPicture;

ΠΈΠ»ΠΈ ΠΊ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌΡƒ рисунку:

p.PrevPicture;

НСтрудно ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΡŽ, ΡΠΎΡΡ‚ΠΎΡΡ‰ΡƒΡŽ Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ цикличСской смСнС рисунков:

while True do

begin

p.NextPicture;

Sleep(100);

end;

ΠœΡƒΠ»ΡŒΡ‚ΠΈΡ€ΠΈΡΡƒΠ½ΠΎΠΊ послС создания хранится Π½Π΅ Π² Π²ΠΈΠ΄Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… рисунков, Π° Π² Π²ΠΈΠ΄Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π΄Π»ΠΈΠ½Π½ΠΎΠ³ΠΎ рисунка, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ всС ΠΊΠ°Π΄Ρ€Ρ‹-рисунки располоТСны ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ. Π’Π°ΠΊΠΎΠΉ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ рисунок ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² Ρ„Π°ΠΉΠ» для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ использования:

p.Save('multipic.gif');

ПослС этого ΠΌΡƒΠ»ΡŒΡ‚ΠΈΡ€ΠΈΡΡƒΠ½ΠΎΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ нСпосрСдствСнно ΠΈΠ· Ρ„Π°ΠΉΠ»Π° с Π΄Π»ΠΈΠ½Π½Ρ‹ΠΌ рисунком, указывая Π² качСствС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΡˆΠΈΡ€ΠΈΠ½Ρƒ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠ°Π΄Ρ€Π°:

p := new MultiPictureABC(50,50,100,'multipic.gif');

Π’Ρ€Π΅Ρ‚ΠΈΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ здСсь ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΡˆΠΈΡ€ΠΈΠ½Ρƒ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠ°Π΄Ρ€Π°.

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Π΅Ρ‰Π΅ Ρ€Π°Π· ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ спрайты SpriteABC ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ ΠΏΠΎ возмоТностям ΠΌΡƒΠ»ΡŒΡ‚ΠΈΡ€ΠΈΡΡƒΠ½ΠΊΠΈ (ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ состояния, Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ строковыми константами, Π° Ρ‚Π°ΠΊΠΆΠ΅ автоматичСски Π°Π½ΠΈΠΌΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρƒ, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ, ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½ΠΎ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ спрайта). Однако, спрайты Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ слоТнСС ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈ, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ½ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ достаточно Π±ΠΎΠ»ΡŒΡˆΠΈΡ… рСсурсов процСссора ΠΏΡ€ΠΈ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ.

Массив всСх графичСских ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Objects

Π’ ΠΌΠΎΠ΄ΡƒΠ»Π΅ ABCObjects ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ динамичСский массив Objects, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ…Ρ€Π°Π½ΠΈΡ‚ всС созданныС графичСскиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Он ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΊ Ρ‚ΠΈΠΏΡƒ ObjectsABCArray, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ Π² ABCObjects. Для массива Objects ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ всСго 2 ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ: Objects.Count Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ количСство графичСских ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π° Objects[i] Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ i-Ρ‚Ρ‹ΠΉ графичСский ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (Ρ‚ΠΈΠΏΠ° ObjectABC, нумСрация осущСствляСтся с 0).

ИспользованиС массива Objects позволяСт Π΅Π΄ΠΈΠ½ΠΎΠΎΠ±Ρ€Π°Π·Π½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊΠΎ всСм графичСским ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ, вызывая для Π½ΠΈΡ… Π»ΡŽΠ±Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π°ΡΡΡŒ ΠΊ Π»ΡŽΠ±Ρ‹ΠΌ свойствам класса ObjectABC.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 1. БроуновскоС Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

uses ABCObjects;

var i:integer;

begin

for i:=1 to 30 do

new CircleABC(Random(WindowWidth),Random(WindowHeight),20,clRandom);

while True do

for i:=0 to Objects.Count-1 do

Objects[i].MoveOn(Random(3)-1,Random(3)-1);

end.

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ создаСтся 30 ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² CircleABC. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ всС ΠΎΠ½ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π² массивС Objects, ΠΏΡ€ΠΈ ΠΈΡ… создании Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π²Ρ‹Π·ΠΎΠ²Π° конструктора Π½Π΅ присваиваСтся Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. ПослС создания всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ Π² бСсконСчном Ρ†ΠΈΠΊΠ»Π΅ Π½Π° случайный Π²Π΅ΠΊΡ‚ΠΎΡ€, ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Ρ броуновскоС Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 2. ИзмСнСниС свойств ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°.

uses ABCObjects;

var i:integer;

begin

for i:=1 to 30 do

case Random(2) of

0: new CircleABC(Random(WindowWidth),Random(WindowHeight),20,clRandom);

1: new RegularPolygonABC(Random(WindowWidth), Random(WindowHeight), 20, 3, clRandom);

end;

while True do

for i:=0 to Objects.Count-1 do

if Objects[i] is RegularPolygonABC then

RegularPolygonABC(Objects[i]).Angle := RegularPolygonABC(Objects[i]).Angle + 1;

end.

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ создаСтся 30 ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² CircleABC ΠΈΠ»ΠΈ RegularPolygonABC. Π—Π°Ρ‚Π΅ΠΌ Π² бСсконСчном Ρ†ΠΈΠΊΠ»Π΅ Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ RegularPolygonABC. Π’Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ достигаСтся ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ свойства Angle, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² классС RegularPolygonABC. Для установки принадлСТности ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΊ классу RegularPolygonABC ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ опСрация is, послС Ρ‡Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Objects[i] прСобразуСтся ΠΊ Ρ‚ΠΈΠΏΡƒ RegularPolygonABC ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ привСдСния Ρ‚ΠΈΠΏΠ°.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 3. Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ всСх графичСских ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΡˆΠΈΡ…ΡΡ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ p:

for i:=Objects.Count-1 downto 0 do

if (Objects[i]<>p) and (p.Intersects(Objects[i]) then

Objects[i].Destroy;

Π’ ΠΈΠ³Ρ€Π°Ρ… часто Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ всС графичСскиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ настиг ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ p. Для этого слСдуСт ΠΏΠ΅Ρ€Π΅Π±Ρ€Π°Ρ‚ΡŒ всС графичСскиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ самого p ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΈΡ… Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ пСрСсСчСния с p. Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ осущСствляСтся Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ дСструктора ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ Ρ‚Π°ΠΊΠΆΠ΅, Ρ‡Ρ‚ΠΎ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ удалСния количСство ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ, поэтому слСдуСт ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΎΡ‚ ΠΊΠΎΠ½Ρ†Π° ΠΊ Π½Π°Ρ‡Π°Π»Ρƒ.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ модуля ABCObjects

procedure LockDrawingObjects;

Π‘Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ рисованиС графичСских ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Π° лишь пСрСрисовка всСго экрана вмСстС со всСми графичСскими ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Π½Π° Π½Π΅ΠΌ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ RedrawObjects

procedure UnLockDrawingObjects;

Π Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ рисованиС графичСских ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

procedure RedrawObjects;

ΠŸΠ΅Ρ€Π΅Ρ€ΠΈΡΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ всС графичСскоС ΠΎΠΊΠ½ΠΎ вмСстС со всСми графичСскими ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Π½Π° Π½Π΅ΠΌ

procedure ToFront(g: ObjectABC);

ΠŸΠ΅Ρ€Π΅Π½ΠΎΡΠΈΡ‚ графичСский ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ g Π½Π° ΠΏΠ΅Ρ€Π΅Π΄Π½ΠΈΠΉ ΠΏΠ»Π°Π½

procedure ToBack(g: ObjectABC);

ΠŸΠ΅Ρ€Π΅Π½ΠΎΡΠΈΡ‚ графичСский ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ g Π½Π° Π·Π°Π΄Π½ΠΈΠΉ ΠΏΠ»Π°Π½

function ObjectsCount: integer;

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ графичСских ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

function ObjectUnderPoint(x,y: integer): ObjectABC;

ГрафичСский ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΠΎΠ΄ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ (x, y)

function ObjectUnderPoint(p: Point): ObjectABC;

ГрафичСский ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΠΎΠ΄ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ p

procedure SwapPositions(o1,o2: ObjectABC);

ΠŸΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ графичСских ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² o1 ΠΈ o2

function UIElementUnderPoint(x,y: integer): UIElementABC;

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ управлСния ABCObject ΠΏΠΎΠ΄ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ (x, y)

var Objects: ObjectsABCArray;

Массив графичСских ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

UIElementABC

Класс элСмСнта управлСния ABCObject

УскорСниС пСрСрисовки графичСских ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

Для обСспСчСния быстрой пСрСрисовки ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠ΅ΠΌ: Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ вызываСтся LockDrawingObjects, Π° ΠΏΡ€ΠΈ нСобходимости ΠΏΠ΅Ρ€Π΅Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ вСсь экран – ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° RedrawObjects. ΠžΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Ρ€Π΅ΠΆΠΈΠΌ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ UnLockDrawingObjects.

ΠŸΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ большого количСства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… двиТСтся, Ρ‚Π°ΠΊΠΎΠΉ ΠΏΡ€ΠΈΠ΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‰ΡƒΡ‚ΠΈΠΌΠΎ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΡŽ. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° здСсь кроСтся Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ: ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΎΠ½ пСрСрисовываСтся Π² своСм ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ΅, ΠΏΡ€ΠΈ этом Π² этом ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ΅ ΠΏΠ΅Ρ€Π΅Ρ€ΠΈΡΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚ΡΡ всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Если Π² графичСском ΠΎΠΊΠ½Π΅ 100 ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… пСрСмСстился, Ρ‚ΠΎ происходит 100*100=10000 пСрСрисовок ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². ПослС Π²Ρ‹Π·ΠΎΠ²Π° LockDrawingObjects пСрСрисовки Π½Π΅ происходит, Π° Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π²Ρ‹Π·ΠΎΠ²Π° RedrawObjects ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ прорисовываСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ происходит всСго 100 пСрСрисовок ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².