FillRgn(Canvas.Handle, ArrowBottomRight, Canvas.Brush.Handle);
ΠΡΡΠ°Π»ΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠ°Π³ β ΠΎΠ±ΡΡΡΠ½ΠΈΡΡ ΡΠΈΡΡΠ΅ΠΌΠ΅, ΡΡΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ, ΡΡ Π²Π°ΡΠΈΠ² Π·Π° ΡΡΡΠ΅Π»ΠΊΠΈ, ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΠ°Π·ΠΌΠ΅ΡΡ ΡΠΎΡΠΌΡ. ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ ΡΡΠΎ ΡΠ΅ΡΠ΅Π· ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ WM_NCHITTEST. ΠΠΎΠΏΡΠΎΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠ·Π½Π°ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΌΡΡΠΈ ΠΏΠΎΠΏΠ°Π΄Π°ΡΡ Π²Π½ΡΡΡΡ Π½Π°ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΡΡΠ΅Π»ΠΊΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΡΠ΅Π»ΠΊΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ ΡΠΎΡΠΌΡ, Π²ΡΡΠΈΡΠ»ΠΈΡΡ ΡΡΠΎ Π½Π΅ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎ. ΠΠ°Π½Π½Π°Ρ Π·Π°Π΄Π°ΡΠ° ΡΠ°ΠΊΠΆΠ΅ ΡΠ΅ΡΠ°Π΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ΅Π³ΠΈΠΎΠ½ΠΎΠ²: ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ ΠΊΡΡΡΠΎΡΠ° Π² ΡΠ΅Π³ΠΈΠΎΠ½ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· ΡΡΡΠ΅Π»ΠΎΠΊ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ PtInRegion (Π»ΠΈΡΡΠΈΠ½Π³ 1.57).
ΠΠΈΡΡΠΈΠ½Π³ 1.57. ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ WM_NCHITTEST ΡΠΎΡΠΌΡprocedure TFormHole.WMNCHitTest(var Msg: TWMNCHitTest);
var
Pt: TPoint;
begin
// Π§ΡΠΎΠ±Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ Π½Π΅ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΡΡ ΠΎΠ±Π»Π°ΡΡΡ,
// Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ
inherited;
// ΠΠ΅ Π·Π°Π±ΡΠ²Π°Π΅ΠΌ, ΡΡΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ WM_NCHITTEST Π΄Π°ΡΡ ΡΠΊΡΠ°Π½Π½ΡΠ΅,
// Π° Π½Π΅ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ
Pt := ScreenToClient(Point(Msg.XPos, Msg.YPos));
// ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Π½Π° ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΠ΅ Π² ΡΠ΅Π³ΠΈΠΎΠ½Ρ ΡΡΡΠ΅Π»ΠΎΠΊ
if PtInRegion(ArrowTopLeft, Pt.X, Pt.Y) then
Msg.Result := HTTOPLEFT
else if PtInRegion(ArrowTopRight, Pt.X, Pt.Y) then
Msg.Result := HTTOPRIGHT
else
if PtInRegion(ArrowBottomLeft, Pt.X, Pt.Y) then
Msg.Result := HTBOTTOMLEFT
else
if PtInRegion(ArrowBottomRight, Pt.X, Pt.Y) then
Msg.Result := HTBOTTOMRIGHT;
end;
ΠΠΎΡ ΠΈ Π²ΡΠ΅. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π½Π΅Ρ ΠΈΡΡΡΡ ΠΏΡΠΈΠ΅ΠΌΠΎΠ² ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΠΎΠΊΠ½ΠΎ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠ°ΠΊΠΎΠΉ Π½Π΅ΠΎΠ±ΡΡΠ½ΡΠΉ Π²ΠΈΠ΄ (ΡΠΌ. ΡΠΈΡ. 1.14).
1.3.4. ΠΠ±ΠΎΠ±ΡΠ°ΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ 4 β ΠΠΈΠ½ΠΈΠΈ Π½Π΅ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ ΡΡΠΈΠ»Ρ
GDI ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΈΡΠΎΠ²Π°ΡΡ Π»ΠΈΠ½ΠΈΠΈ ΡΠ°Π·Π½ΡΡ ΡΡΠΈΠ»Π΅ΠΉ, Π½ΠΎ Π±ΡΠ²Π°ΡΡ ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΠΏΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΠΈΠ»Ρ Π»ΠΈΠ½ΠΈΠΉ Π½Π΅ Ρ Π²Π°ΡΠ°Π΅Ρ. Π ΡΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΌΡ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ, ΠΊΠ°ΠΊ ΡΠΈΡΠΎΠ²Π°ΡΡ Π»ΠΈΠ½ΠΈΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ ΡΡΠΈΠ»Ρ (Π½Π°ΡΠ½Π΅ΠΌ Ρ ΠΏΡΡΠΌΡΡ , ΠΏΠΎΡΠΎΠΌ ΠΏΠ΅ΡΠ΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΠΊΡΠΈΠ²ΡΠΌ ΠΠ΅Π·ΡΠ΅), Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ΄Π΅Π»Π°Π΅ΠΌ "ΡΠ΅Π·ΠΈΠ½ΠΎΠ²ΡΡ" Π»ΠΈΠ½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠ½ΡΡΡ ΠΌΡΡΡΡ.
1.3.4.1. ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ ΡΠΎΡΠ΅ΠΊ ΠΏΡΡΠΌΠΎΠΉ
Π ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ Π»ΠΈΠ½ΠΈΠΉ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ: Π²ΡΡΠΈΡΠ»ΡΡΡΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Π²ΡΠ΅Ρ ΠΏΠΈΠΊΡΠ΅Π»ΠΎΠ², ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΏΡΡΠΌΡΡ, Π° ΠΏΠΎΡΠΎΠΌ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· Π½ΠΈΡ (Π° ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ β ΠΈ ΠΊΠ°ΠΊΠ°Ρ-Π»ΠΈΠ±ΠΎ Π΅Π³ΠΎ ΠΎΠΊΡΠ΅ΡΡΠ½ΠΎΡΡΡ) ΡΠ°ΡΠΊΡΠ°ΡΠΈΠ²Π°ΡΡΡΡ Π½ΡΠΆΠ½ΡΠΌ ΡΠ²Π΅ΡΠΎΠΌ. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π²ΠΎΠΏΡΠΎΡ ΠΎΠ± ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ ΠΏΠΈΠΊΡΠ΅Π»ΠΎΠ².
Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΡΠ΄ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΡΠΈΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ. ΠΠ°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΉ ΠΈΠ· Π½ΠΈΡ β Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΡΠ΅Π·Π΅Π½Ρ ΡΠΌΠ° (Bresengham), ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠ°Π²Π½ΠΎΠΌΠ΅ΡΠ½ΠΎΠΌ ΡΠ°Π·Π±ΡΠ°ΡΡΠ²Π°Π½ΠΈΠΈ "ΡΡΡΠΏΠ΅Π½Π΅ΠΊ" ΡΠ°Π·Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ Π²Π΄ΠΎΠ»Ρ Π»ΠΈΠ½ΠΈΠΈ. Π Windows ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ GIQ (Grid Intersection Quantization). ΠΠ°ΠΆΠ΄ΡΠΉ ΠΏΠΈΠΊΡΠ΅Π» ΠΎΠΊΡΡΠΆΠ°Π΅ΡΡΡ Π²ΠΎΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌΡΠΌ ΡΠΎΠΌΠ±ΠΎΠΌ ΠΈΠ· ΡΠ΅ΡΡΡΠ΅Ρ ΠΏΠΈΠΊΡΠ΅Π»ΠΎΠ². ΠΡΠ»ΠΈ ΠΏΡΡΠΌΠ°Ρ ΠΈΠΌΠ΅Π΅Ρ ΠΎΠ±ΡΠΈΠ΅ ΡΠΎΡΠΊΠΈ Ρ ΡΡΠΈΠΌ ΡΠΎΠΌΠ±ΠΎΠΌ, ΡΠΎ ΠΏΠΈΠΊΡΠ΅Π» ΡΠΈΡΡΠ΅ΡΡΡ.
Π‘Π°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ°ΠΊΠΈΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² Π½Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ β Π² Windows ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΡ LineDDA, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π²ΡΠ·Π²Π°Π²ΡΠ΅ΠΉ Π΅Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Π»ΠΈΠ½ΠΈΠΈ. ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Π½Π°ΡΠ°Π»Π° ΠΈ ΠΊΠΎΠ½ΡΠ° Π»ΠΈΠ½ΠΈΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠΉ Π±ΡΠ΄ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΏΠΈΠΊΡΠ΅Π»ΠΎΠ². ΠΠ°Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅. ΠΠ° Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ LineDDA ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π±ΡΠ΄Π΅Ρ Π²ΡΠ·Π²Π°Π½Π° ΡΡΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΈΠΊΡΠ΅Π»ΠΎΠ² ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π»ΠΈΠ½ΠΈΡ (ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΠΎ Π² Windows, ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΏΠΈΠΊΡΠ΅Π» Π½Π΅ ΡΡΠΈΡΠ°Π΅ΡΡΡ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°ΡΠΈΠΌ ΠΏΡΡΠΌΠΎΠΉ). ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ Π΅ΠΉ Π±ΡΠ΄ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠ³ΠΎ ΠΏΠΈΠΊΡΠ΅Π»Π°, ΠΏΡΠΈΡΠ΅ΠΌ ΠΏΠΈΠΊΡΠ΅Π»Ρ Π±ΡΠ΄ΡΡ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Ρ ΠΎΡ Π½Π°ΡΠ°Π»Π° ΠΊ ΠΊΠΎΠ½ΡΡ ΠΏΡΡΠΌΠΎΠΉ.
Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Lines (ΡΠΈΡ. 1.15) Ρ ΠΏΠΎΠΌΠΎΡΡΡ LineDDA ΡΠΈΡΡΠ΅ΡΡΡ ΠΏΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ² Π»ΠΈΠ½ΠΈΠΉ. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΠ°ΠΌΠΎΠ³ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΠ³ΠΎ ΠΈΠ· ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ ΡΠΈΠΏΠΎΠ² Π»ΠΈΠ½ΠΈΠΈ ("ΠΠ΅Π»Π΅Π½Π°Ρ Π΅Π»ΠΎΡΠΊΠ°"), ΠΊΠ°ΠΊ ΡΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ (Π»ΠΈΡΡΠΈΠ½Π³ 1.58).
Π ΠΈΡ. 1.15. ΠΠΊΠ½ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Lines
// ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ Π΄Π»Ρ ΡΠΈΠΏΠ° "ΠΠ΅Π»Π΅Π½Π°Ρ Π΅Π»ΠΎΡΠΊΠ°"
const
// Π£Π³ΠΎΠ» ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΡ "ΠΈΠ³ΠΎΠ»ΠΊΠΈ" ΠΎΡ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π»ΠΈΠ½ΠΈΠΈ
FirNeedleAngle = 30;
//ΠΠ»ΠΈΠ½Π° ΠΈΠ³ΠΎΠ»ΠΊΠΈ
FirNeedleLength = 8;
var
Counter: Integer; // Π‘ΡΠ΅ΡΡΠΈΠΊ ΡΠΎΡΠ΅ΠΊ Π»ΠΈΠ½ΠΈΠΈ
// ΠΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π΄Π»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ "Π΅Π»ΠΎΡΠΊΠΈ"
DX1, DY1, DX2, DY2: Integer;
// ΠΠΈΠ½ΠΈΡ Π² Π²ΠΈΠ΄Π΅ "Π΅Π»ΠΎΡΠΊΠΈ"
procedure LineDrawFir(X, Y: Integer; Canvas: TCanvas); stdcall;
begin
with Canvas do case Counter mod 10 of
0: begin
MoveTo(X, Y);
LineTo(X + DX1, Y + DY1);
end;
5:
begin
MoveTo(X, Y);
LineTo(X + DX2, Y + DY2);
end;
end;
Inc(Counter);
end;
procedure TLinesForm.Line(X1, Y1, X2, Y2: Integer);
var
Angle: Extended;
begin
case RGroupLine.ItemIndex of
...
4:
begin
Counter := 0;
Angle := ArcTan2(Y2 - Y1, X2 - X1);
DX1 := Round(FirNeedleLength *
Cos(Angle + Pi / 180 * FirNeedleAngle));
DY1 := Round(FirNeedleLength *
Sin(Angle + Pi / 180 * FirNeedleAngle));
DX2 := Round(FirNeedleLength *
Cos(Angle - Pi / 180 * FirNeedleAngle));
DY2 := Round(FirNeedleLength *
Sin(Angle - Pi / 180 * FirNeedleAngle));
LineDDA(X1, Y1, X2, Y2, @LineDrawFir, Integer(Canvas));
end;
end;
end;
ΠΠ°ΠΆΠ΄Π°Ρ "ΠΈΠ³ΠΎΠ»ΠΊΠ°" β ΡΡΠΎ Π»ΠΈΠ½ΠΈΡ Π΄Π»ΠΈΠ½ΠΎΠΉ FirNeedleLength ΠΏΠΈΠΊΡΠ΅Π»ΠΎΠ², ΠΎΡΠΊΠ»ΠΎΠ½ΡΡΡΠ°ΡΡΡ ΠΎΡ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΡΠΌΠΎΠΉ Π½Π° ΡΠ³ΠΎΠ» FirNeedleAngle Π³ΡΠ°Π΄ΡΡΠΎΠ². "ΠΠ³ΠΎΠ»ΠΊΠΈ" ΠΎΡΠΊΠ»ΠΎΠ½ΡΡΡΡΡ ΠΏΠΎΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΠΎ Π² ΠΎΠ΄Π½Ρ, ΡΠΎ Π² Π΄ΡΡΠ³ΡΡ ΡΡΠΎΡΠΎΠ½Ρ ΠΎΡ ΠΏΡΡΠΌΠΎΠΉ. Π ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ΅ Line ΡΠ½Π°ΡΠ°Π»Π° ΡΠ°ΡΡΡΠΈΡΡΠ²Π°ΡΡΡΡ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ ΠΊΠΎΠ½ΡΠ° "ΠΈΠ³ΠΎΠ»ΠΊΠΈ" ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π°ΡΠ°Π»Π° ΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡΡΡ Π² Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ DX1, DY1, DX2, DY2. ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Counter ΡΠ»ΡΠΆΠΈΡ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π½ΠΎΠΌΠ΅ΡΠ° ΡΠΎΡΠΊΠΈ. ΠΠ΅ΡΠ΅Π΄ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ LineDDA ΠΎΠ½Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ Π½ΡΠ»Π΅ΠΌ. ΠΠ°ΡΠ΅ΠΌ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ LineDDA, Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° LineDrawFir. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΡΠΎΠ³ΠΎ ΡΡΠ½ΠΊΡΠΈΡ LineDrawFir Π±ΡΠ΄Π΅Ρ Π²ΡΠ·Π²Π°Π½Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΠΏΠΈΠΊΡΠ΅Π»ΠΎΠ², ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΡ Π»ΠΈΠ½ΠΈΡ, Π½Π°ΡΠΈΠ½Π°Ρ Ρ (X1, Y1). LineDrawFir Π²Π΅Π΄Π΅Ρ ΠΏΠΎΠ΄ΡΡΠ΅Ρ ΠΏΠΈΠΊΡΠ΅Π»ΠΎΠ², ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Ρ Counter Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡΡ. ΠΡΠ»ΠΈ ΠΎΡΡΠ°ΡΠΎΠΊ ΠΎΡ Π΄Π΅Π»Π΅Π½ΠΈΡ Π½ΠΎΠΌΠ΅ΡΠ° ΡΠΎΡΠΊΠΈ Π½Π° 10 ΡΠ°Π²Π΅Π½ 0, ΡΠΈΡΡΠ΅ΡΡΡ "ΠΈΠ³ΠΎΠ»ΠΊΠ°", ΠΎΡΠΊΠ»ΠΎΠ½ΡΡΡΠ°ΡΡΡ Π² ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ, Π΅ΡΠ»ΠΈ 5 β Π² ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠΌ. Π ΠΎΡΡΠ°Π»ΡΠ½ΡΡ ΡΠ»ΡΡΠ°ΡΡ Π½Π΅ ΡΠΈΡΡΠ΅ΡΡΡ Π½ΠΈΡΠ΅Π³ΠΎ. Π’Π°ΠΊ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ "Π΅Π»ΠΎΡΠΊΠ°".
1.3.4.2. "Π Π΅Π·ΠΈΠ½ΠΎΠ²Π°Ρ" Π»ΠΈΠ½ΠΈΡ ΠΈ ΡΠ°ΡΡΡΠΎΠ²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ
Π’Π΅ΠΏΠ΅ΡΡ Π½ΡΠΆΠ½ΠΎ Π΄Π°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΈΡΠΎΠ²Π°ΡΡ Π»ΠΈΠ½ΠΈΠΈ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ "ΡΠ΅Π·ΠΈΠ½ΠΎΠ²ΡΡ" Π»ΠΈΠ½ΠΈΡ: ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ Π»Π΅Π²ΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ ΠΌΡΡΠΈ ΠΈ, ΡΠ΄Π΅ΡΠΆΠΈΠ²Π°Ρ Π΅Π΅, ΠΏΠ΅ΡΠ΅Π΄Π²ΠΈΠ³Π°Π΅Ρ ΠΌΡΡΡ. ΠΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΠΊΠ½ΠΎΠΏΠΊΠ° ΡΠ΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ, Π·Π° ΠΊΡΡΡΠΎΡΠΎΠΌ ΡΡΠ½Π΅ΡΡΡ Π»ΠΈΠ½ΠΈΡ. ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΎΡΠΏΡΡΠΊΠ°Π΅Ρ ΠΊΠ½ΠΎΠΏΠΊΡ, Π»ΠΈΠ½ΠΈΡ "Π²ΠΏΠ΅ΡΠ°ΡΡΠ²Π°Π΅ΡΡΡ" Π² ΡΠΈΡΡΠ½ΠΎΠΊ.
Π‘Π°ΠΌΠ° ΠΏΠΎ ΡΠ΅Π±Π΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ "ΡΠ΅Π·ΠΈΠ½ΠΎΠ²ΠΎΠΉ" Π»ΠΈΠ½ΠΈΠΈ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠ°: ΠΏΡΠΈ Π½Π°ΡΡΡΠΏΠ»Π΅Π½ΠΈΠΈ ΡΠΎΠ±ΡΡΠΈΡ OnMouseDown Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡΡΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Π½Π°ΡΠ°Π»Π° Π»ΠΈΠ½ΠΈΠΈ ΠΈ Π²Π·Π²ΠΎΠ΄ΠΈΡΡΡ ΡΠ»Π°Π³, ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΠΉ, ΡΡΠΎ Π²ΠΊΠ»ΡΡΠ΅Π½ ΡΠ΅ΠΆΠΈΠΌ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ "ΡΠ΅Π·ΠΈΠ½ΠΎΠ²ΠΎΠΉ" Π»ΠΈΠ½ΠΈΠΈ. Π’Π°ΠΊΠΆΠ΅ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡΡΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΊΠΎΠ½ΡΠ° ΠΎΡΡΠ΅Π·ΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ Ρ Π½Π°ΡΠ°Π»ΠΎΠΌ. Π ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ΅ OnMouseMove, Π΅ΡΠ»ΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½ ΡΠ΅ΠΆΠΈΠΌ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ "ΡΠ΅Π·ΠΈΠ½ΠΎΠ²ΠΎΠΉ" Π»ΠΈΠ½ΠΈΠΈ, ΡΡΠΈΡΠ°Π΅ΡΡΡ Π»ΠΈΠ½ΠΈΡ ΡΠΎ ΡΡΠ°ΡΡΠΌΠΈ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°ΠΌΠΈ ΠΊΠΎΠ½ΡΠ° ΠΈ ΡΠΈΡΡΠ΅ΡΡΡ Ρ Π½ΠΎΠ²ΡΠΌΠΈ. ΠΡΠΈ Π½Π°ΡΡΡΠΏΠ»Π΅Π½ΠΈΠΈ OnMouseUp ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π²ΡΡ ΠΎΠ΄ΠΈΡ ΠΈΠ· ΡΠ΅ΠΆΠΈΠΌΠ° ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ "ΡΠ΅Π·ΠΈΠ½ΠΎΠ²ΠΎΠΉ" Π»ΠΈΠ½ΠΈΠΈ, ΡΠΈΡΡΡ ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ Π΅Π΅ Π²Π°ΡΠΈΠ°Π½Ρ Ρ ΡΠ΅ΠΊΡΡΠΈΠΌΠΈ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°ΠΌΠΈ ΠΊΠΎΠ½ΡΠ°.
Π‘Π°ΠΌΠΎΠ΅ ΡΠ»ΠΎΠΆΠ½ΠΎΠ΅ Π² ΡΡΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ β ΡΡΠ΅ΡΠ΅ΡΡ Π½Π°ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΠ°Π½Π΅Π΅ Π»ΠΈΠ½ΠΈΡ. ΠΡΠ»ΠΈ Π±Ρ Ρ Π½Π°Ρ Π±ΡΠ» ΠΎΠ΄Π½ΠΎΡΠΎΠ΄Π½ΡΠΉ ΡΠΎΠ½, ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΏΡΠΎΡΡΠΎ Π½Π°ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ°ΡΡΡ Π»ΠΈΠ½ΠΈΡ Π΅ΡΠ΅ ΡΠ°Π· ΡΠ²Π΅ΡΠΎΠΌ ΡΠΎΠ½Π° β ΡΡΠΎ Π²ΡΠ³Π»ΡΠ΄Π΅Π»ΠΎ Π±Ρ ΠΊΠ°ΠΊ Π΅Π΅ ΡΡΠΈΡΠ°Π½ΠΈΠ΅. ΠΠΎ ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠΎΠ½ Π½Π΅ ΠΎΠ΄Π½ΠΎΡΠΎΠ΄Π½ΡΠΉ, Π° ΡΠΎΡΡΠ°Π²Π»Π΅Π½ ΠΈΠ· Π½Π°ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΠ°Π½Π΅Π΅ Π»ΠΈΠ½ΠΈΠΉ, ΡΡΠΎΡ ΡΠΏΠΎΡΠΎΠ± ΠΌΡ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ.
ΠΠ»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ ΠΌΡ Π·Π΄Π΅ΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ°ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ β ΠΈΠ½Π²Π΅ΡΡΠ½ΠΎΠ΅ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ (Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ ΡΡΡΡ ΠΏΠΎΠ·ΠΆΠ΅). ΠΡΠΈ ΡΡΠΎΠΌ ΠΊΠ°ΠΆΠ΄Π°Ρ ΡΠΎΡΠΊΠ°, ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°ΡΠ°Ρ Π»ΠΈΠ½ΠΈΠΈ, Π·Π°ΠΊΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ Π½Π΅ ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΡΠ²Π΅ΡΠΎΠΌ, Π° ΠΈΠ½Π²Π΅ΡΡΠΈΡΡΠ΅ΡΡΡ (Ρ.Π΅. ΠΊ ΡΠ΅ΠΊΡΡΠ΅ΠΌΡ ΡΠ²Π΅ΡΡ ΡΠΎΡΠΊΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ not). ΠΠ»Ρ ΡΡΠΈΡΠ°Π½ΠΈΡ Π»ΠΈΠ½ΠΈΠΈ ΠΏΡΠΎΡΡΠΎ ΡΠΈΡΡΠ΅ΠΌ Π΅Π΅ Π΅ΡΠ΅ ΡΠ°Π·: Π΄Π²ΠΎΠΉΠ½Π°Ρ ΠΈΠ½Π²Π΅ΡΡΠΈΡ Π²ΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ ΡΠ²Π΅Ρ ΡΠΎΡΠ΅ΠΊ (not not X = X Π΄Π»Ρ Π»ΡΠ±ΠΎΠ³ΠΎ X).
ΠΡΠΈ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΠ΅ΡΠΎΠΌ ΠΈ ΠΊΠΈΡΡΡΡ GDI ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠ°ΡΡΡΠΎΠ²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠΈΠΉ ΡΠ²Π΅Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΈΠΊΡΠ΅Π»Π° Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠ²Π΅ΡΠ° ΡΠΎΠ½Π° ΠΈ ΠΏΠ΅ΡΠ° ΠΈΠ»ΠΈ ΠΊΠΈΡΡΠΈ. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ R2_COPYPEN, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ²Π΅Ρ ΡΠΎΠ½Π° ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅ΡΡΡ, Π° ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠΈΠΉ ΡΠ²Π΅Ρ ΠΏΠΈΠΊΡΠ΅Π»Π° ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ Ρ ΡΠ²Π΅ΡΠΎΠΌ ΠΏΠ΅ΡΠ° ΠΈΠ»ΠΈ ΠΊΠΈΡΡΠΈ. ΠΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠ°ΡΡΡΠΎΠ²ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ SetROP2 (Π΄Π²ΠΎΠΉΠΊΠ° Π² Π½Π°Π·Π²Π°Π½ΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌΠ°Ρ ΡΠ°ΡΡΡΠΎΠ²Π°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΈΠΌΠ΅Π΅Ρ Π΄Π²Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° β ΡΠ²Π΅Ρ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΡΠ²Π΅Ρ ΡΠΎΠ½Π°: ΠΏΡΠΈ Π²ΡΠ²ΠΎΠ΄Π΅ ΡΠ°ΡΡΡΠΎΠ²ΡΡ ΡΠΈΡΡΠ½ΠΊΠΎΠ² ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΡΠ°ΡΡΡΠΎΠ²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ ΡΡΠ΅ΠΌΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ β ΡΠΌ. ΡΡΠ½ΠΊΡΠΈΡ BitBlt). ΠΠ°Ρ Π±ΡΠ΄Π΅Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ R2_NOT, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΠ½Π²Π΅ΡΡΠΈΡΡΠ΅Ρ ΡΠΎΠ½ΠΎΠ²ΡΠΉ ΡΠ²Π΅Ρ, ΠΈΠ³Π½ΠΎΡΠΈΡΡΡ ΡΠ²Π΅Ρ ΠΏΠ΅ΡΠ° ΠΈΠ»ΠΈ ΠΊΠΈΡΡΠΈ.