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

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

Автор W Cat

ΠŸΡ€ΠΎΡ‡ΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ Exam2 Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚.

Π’Ρ‹Π·ΠΎΠ² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ Exam2 Π½Π°Π΄ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΠΊΠΎΠ½Π΅Ρ† ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° case ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ InitTask, связав Π΅Π³ΠΎ с Π½ΠΎΠΌΠ΅Ρ€Π°ΠΌΠΈ 17 ΠΈ 18:


procedure InitTask(num: integer);

begin

case num of

1..2: UseTask('ExamBegin', 70 + num);

3..4: Exam1(num - 2);

5..16: UseTask('ExamTaskC', 20 + num);

17..18: Exam2(num - 16);

end;

end;


ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΡΡ‚ΡŒ ΠΎΡ‚ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ CreateGroup, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ количСство Π·Π°Π΄Π°Π½ΠΈΠΉ, ΠΏΠΎΠ»ΠΎΠΆΠΈΠ² Π΅Π³ΠΎ Ρ€Π°Π²Π½Ρ‹ΠΌ 18.

ΠŸΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ клавиши [F9] Π½Π° экранС появится ΠΎΠΊΠ½ΠΎ Π·Π°Π΄Π°Ρ‡Π½ΠΈΠΊΠ° с послСдним Π·Π°Π΄Π°Π½ΠΈΠ΅ΠΌ Π΄Π°Π½Π½ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹ (Π½Π° рисункС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π²ΠΈΠ΄ ΠΎΠΊΠ½Π° послС ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ Ρ€Π°Π·Π΄Π΅Π»Π° с Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ задания):

Если Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠΏΡΡ‚ΡŒ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ символ ?" Π½Π° символ "# " Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ Task Ρ‚Π΅ΡΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‚ΠΎ ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ [F9] ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ html-страницу с описаниСм Π³Ρ€ΡƒΠΏΠΏΡ‹, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ содСрТит Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅, Π½ΠΎ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π½Π°ΠΌΠΈ задания:

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΡ€ΠΈ создании Π½ΠΎΠ²Ρ‹Ρ… Π·Π°Π΄Π°Π½ΠΈΠΉ ΠΌΡ‹ ΡƒΠΊΠ°Π·Π°Π»ΠΈ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ CreateTask названия ΠΏΠΎΠ΄Π³Ρ€ΡƒΠΏΠΏ (ΠΈ размСстили Π½ΠΎΠ²Ρ‹Π΅ задания послС Π·Π°Π΄Π°Π½ΠΈΠΉ ΠΈΠ· Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄Π³Ρ€ΡƒΠΏΠΏ), Π½ΠΎΠ²Ρ‹Π΅ задания ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π² составС этих ΠΏΠΎΠ΄Π³Ρ€ΡƒΠΏΠΏ: ExamDemo3 ΠΈ ExamDemo4 -- Π² ΠΏΠΎΠ΄Π³Ρ€ΡƒΠΏΠΏΠ΅ "ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ массивов", Π° ExamDemo17 ΠΈ ExamDemo18 -- Π² ΠΏΠΎΠ΄Π³Ρ€ΡƒΠΏΠΏΠ΅ "ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° слоТных Π½Π°Π±ΠΎΡ€ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…".

Π£Ρ€ΠΎΠΊΠΈ PascalABC .NET

ABCObjects: быстроС Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅

ΠžΡΠ½ΠΎΠ²Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ графичСских ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ ABCObjects, ΡΠ²Π»ΡΡŽΡ‚ΡΡ RectangleABC, SquareABC, EllipseABC, CircleABC, TextABC, RegularPolygonABC, StarABC, PictureABC, MultiPictureABC, BoardABC ΠΈ ContainerABC.

Π’ΠΈΠΏΡ‹ графичСских ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой классы, состоящиС ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ свойств, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½ΡƒΠΆΠ΄Π°ΡŽΡ‰ΠΈΠ΅ΡΡ Π² конструировании ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ использованиСм. ИзмСнСниС свойств влияСт Π½Π° внСшний Π²ΠΈΠ΄ ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ графичСских ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². НапримСр, ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ свойств Width ΠΈ Height ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ графичСского ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ свойства Color - Ρ†Π²Π΅Ρ‚ графичСского ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ Ρ‚.Π΄. Π’Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² графичСского ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΠ»ΠΈ мСняСт Π΅Π³ΠΎ характСристики. НапримСр, ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ToFront графичСский ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ пСрСмСщаСтся Π½Π° ΠΏΠ΅Ρ€Π΅Π΄Π½ΠΈΠΉ ΠΏΠ»Π°Π½, Π° Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Intersect(g) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚, пСрСсСкаСтся Π»ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ g.

ВсС графичСскиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ разновидностями класса ObjectABC, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит ΠΎΠ±Ρ‰ΠΈΠ΅ для всСх свойства ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π΄Π²Π° ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ…ΡΡ графичСских ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°:

uses ABCObjects,GraphABC;

var

r: RectangleABC;

c: CircleABC;

begin

r := new RectangleABC(70,50,200,100,clMoneyGreen);

c := new CircleABC(120,80,110,clBlue);

end.

ПослС запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ Π½Π° экранС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

ПомСняСм Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ свойства графичСских ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ MoveOn для окруТности, дописав Π² ΠΊΠΎΠ½Π΅Ρ† ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ строки:

r.Width := 150;

c.Color := clRed;

c.MoveOn(30,30);

ПослС запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

Π”ΠΎΠ±Π°Π²ΠΈΠΌ Π² ΠΊΠΎΠ½Π΅Ρ† ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ строки:

c.Number := 8;

r.Text := 'Hello';

r.ToFront;

ПослС запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

ABCObjects: ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ графичСских ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

Класс ContainerABC прСдставляСт собой ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ графичСских ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Он Ρ‚Π°ΠΊΠΆΠ΅ являСтся ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠΌ ObjectABC, Π½ΠΎ ΠΏΡ€ΠΈ создании Π½Π΅ содСрТит Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Он добавляСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ интСрфСйс:

procedure Add(g: ObjectABC);

property Count: integer; // количСство ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

property Objects[i: integer]: ObjectABC; // i-Ρ‚Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚

ΠŸΡ€ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ContainerABC производится ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ всСх входящих Π² Π½Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². ΠŸΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² ContainerABC Π΅Π³ΠΎ свойство Owner становится Ρ€Π°Π²Π½Ρ‹ΠΌ этому ContainerABC. ΠŸΡ€ΠΈ присваивании свойству Owner ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π΅Π³ΠΎ Π²Π»Π°Π΄Π΅Π»Π΅Ρ† мСняСтся, ΠΏΡ€ΠΈ этом ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ пСрСрисовываСтся ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠΉ Π½ΠΎΠ²ΠΎΠΌΡƒ Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Ρƒ. ΠŸΡ€ΠΈ присваивании свойству Owner ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° значСния nil ΠΎΠ½ пСрСстаСт ΠΈΠΌΠ΅Ρ‚ΡŒ Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π° ΠΈ отобраТаСтся нСпосрСдствСнно Π² графичСском ΠΎΠΊΠ½Π΅.

Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ:

uses ABCObjects,GraphABC;

var

c1,c2: ContainerABC;

r: CircleABC;

begin

SetWindowSize(300,300);

c1 := new ContainerABC(50,30);

c1.Add(new RectangleABC(0,0,200,100,clGreen));

r := new CircleABC(15,15,70,clYellow);

end.

ПослС Π΅Π΅ запуска графичСский экран ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄:

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ c1 содСрТит Π·Π΅Π»Π΅Π½Ρ‹ΠΉ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ, Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ r Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π° (r.Owner=nil). НСтрудно ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ObjectsCount=2 (ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΈ ΠΊΡ€ΡƒΠ³), Π° c1.Count=1.

Π”ΠΎΠ±Π°Π²ΠΈΠΌ ΠΊΡ€ΡƒΠ³ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, дописав Π² ΠΊΠΎΠ½Π΅Ρ† ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ строчку

c1.Add(r);

ПослС запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ графичСский экран ΠΏΡ€ΠΈΠΌΠ΅Ρ‚ Π²ΠΈΠ΄:

ΠšΡ€ΡƒΠ³ r Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ (r.Owner=с2), ObjectsCount=1 (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€), Π° c1.Count=2. ΠšΡ€ΠΎΠΌΠ΅ этого, ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΊΡ€ΡƒΠ³Π° ΠΏΠ΅Ρ€Π΅ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°-Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π° (ΠΎΠ½ΠΈ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Ρ€Π°Π²Π½Ρ‹ (15,15), Π½ΠΎ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»Π΅Π²ΠΎΠ³ΠΎ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ ΡƒΠ³Π»Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° c1).

Π’Π°ΠΊΠΎΠΉ ΠΆΠ΅ эффСкт ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°

r.Owner := c1;

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ c2 ΠΈ помСняСм Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π° Ρƒ r Π½Π° c2. Для этого допишСм Π² ΠΊΠΎΠ½Π΅Ρ† строки:

c2 := new ContainerABC(50,160);

c2.Add(new RectangleABC(0,0,200,100,clMoneyGreen));

r.Owner := c2;

ПослС запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ графичСский экран ΠΏΡ€ΠΈΠΌΠ΅Ρ‚ Π²ΠΈΠ΄:

Как ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, ΠΊΡ€ΡƒΠ³ r помСнял Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π°, ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ (15,15), Π½ΠΎ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»Π΅Π²ΠΎΠ³ΠΎ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ ΡƒΠ³Π»Π° Π½ΠΎΠ²ΠΎΠ³ΠΎ Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π° c2.

Если вмСсто строчки r.Owner:=c2; Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ r.Owner:=nil; , Ρ‚ΠΎ ΠΊΡ€ΡƒΠ³ r потСряСт Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π° ΠΈ снова Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»Π΅Π²ΠΎΠ³ΠΎ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ ΡƒΠ³Π»Π° экрана:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

Π“Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΈ анимация

Анимация Π±Π΅Π· мСрцания

Данная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ LockDrawing ΠΈ Redraw для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ Π±Π΅Π· мСрцания:



uses GraphABC;

begin

LockDrawing;

for var i:=1 to 500 do

begin

Window.Clear;

Brush.Color := clGreen;

Ellipse(i,100,i+100,200);

Redraw;

Sleep(1);

end;

end.


Основная идСя состоит Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ: ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΠΌ рисованиС Π½Π° экранС, Π²Ρ‹Π·Π²Π°Π² LockDrawing (рисованиС Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΎ внСэкранном Π±ΡƒΡ„Π΅Ρ€Π΅), послС Ρ‡Π΅Π³ΠΎ Π±ΡƒΠ΄Π΅ΠΌ всякий Ρ€Π°Π· Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠ°Π΄Ρ€ изобраТСния ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ Π½Π° экран, вызывая Redraw. ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Redraw пСрСрисовываСтся всС графичСскоС ΠΎΠΊΠ½ΠΎ, поэтому ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ Π²Ρ‹Π²ΠΎΠ΄Π° внСэкранного Π±ΡƒΡ„Π΅Ρ€Π° Π½Π° экран.

ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠ΅ события

РисованиС ΠΌΡ‹ΡˆΡŒΡŽ Π² графичСском ΠΎΠΊΠ½Π΅

Данная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° осущСствляСт рисованиС ΠΌΡ‹ΡˆΡŒΡŽ Π² графичСском ΠΎΠΊΠ½Π΅:



uses GraphABC;


procedure MouseDown(x,y,mb: integer);

begin

MoveTo(x,y);

end;

procedure MouseMove(x,y,mb: integer);

begin

if mb=1 then LineTo(x,y);

end;

begin

// ΠŸΡ€ΠΈΠ²ΡΠ·ΠΊΠ° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΊ событиям

OnMouseDown := MouseDown;

OnMouseMove := MouseMove

end.


ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΠΊΠ½Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹

Данная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° осущСствляСт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ графичСского ΠΎΠΊΠ½Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹:



uses GraphABC;

procedure KeyDown(Key: integer);

begin

case Key of

VK_Left: Window.Left := Window.Left - 2;

VK_Right: Window.Left := Window.Left + 2;

VK_Up: Window.Top := Window.Top - 2;

VK_Down: Window.Top := Window.Top + 2;

end;

end;

begin

// ΠŸΡ€ΠΈΠ²ΡΠ·ΠΊΠ° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΊ событиям

OnKeyDown := KeyDown;

end.


ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°

Данная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ 1 ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 100 миллисСкунд Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ 3 сСкунд:



uses Timers;


procedure TimerProc;

begin

write(1);

end;


begin

var t := new Timer(100,TimerProc);

t.Start;

Sleep(3000);

end.


Π’Ρ‹Π·ΠΎΠ² Sleep здСсь обязатСлСн, ΠΈΠ½Π°Ρ‡Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° послС создания Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° сразу закончится, ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° Π½ΠΈ Ρ€Π°Π·Ρƒ Π½Π΅ сработаСт.