ΠΠΈΡΡΠΈΠ½Π³ 1.10. ΠΠΊΠ½ΠΎ ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π² ΡΠΎΡΠΌΠ΅ ΡΠ»Π»ΠΈΠΏΡΠΎΠ²
procedure TfrmElliptic.FormCreate(Sender: TObject);
var
formRgn, but1Rgn, but2Rgn, but3Rgn: HRGN;
begin
//Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΡΠ΅Π³ΠΈΠΎΠ½Ρ ΠΊΠ½ΠΎΠΏΠΎΠΊ
but1Rgn:= CreateEllipticRgn(0, 0, Button1.Widthβ1, Button1.
Heightβ1);
SetWindowRgn(Button1.Handle, but1Rgn, False);
but2Rgn:= CreateEllipticRgn(0, 0, Button2.Widthβ1, Button2.
Heightβ1);
SetWindowRgn(Button2.Handle, but2Rgn, False);
but3Rgn:= CreateEllipticRgn(0, 0, Button3.Widthβ1, Button3.
Heightβ1);
SetWindowRgn(Button3.Handle, but3Rgn, False);
//Π Π΅Π³ΠΈΠΎΠ½ Π΄Π»Ρ ΠΎΠΊΠ½Π°
formRgn:= CreateEllipticRgn(0, 0, Widthβ1, Heightβ1);
SetWindowRgn(Handle, formRgn, True);
end;
Π¨ΠΈΡΠΈΠ½Π° ΠΈ Π²ΡΡΠΎΡΠ° ΡΠ»Π»ΠΈΠΏΡΠΎΠ² Π² ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΠ°Π²Π½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ ΡΠΈΡΠΈΠ½Π΅ ΠΈ Π²ΡΡΠΎΡΠ΅ ΡΠ΅Ρ ΠΎΠΊΠΎΠ½, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΡΠ΅Π³ΠΈΠΎΠ½Ρ (ΡΠΎΡΠΌΡ ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· ΠΊΠ½ΠΎΠΏΠΎΠΊ). ΠΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ, ΡΡΠΎΠ±Ρ Π²ΡΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π±ΡΠ»ΠΈ ΠΎΠ΄Π½ΠΎΠΉ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠ°Π·ΠΌΠ΅ΡΠ°, ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΡΠΌΡ.
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°Π±ΠΎΡΡ Π»ΠΈΡΡΠΈΠ½Π³Π° 1.10 ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π½Π° ΡΠΈΡ. 1.5.
Π ΠΈΡ. 1.5. ΠΠΊΠ½ΠΎ ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π² ΡΠΎΡΠΌΠ΅ ΡΠ»Π»ΠΈΠΏΡΠΎΠ²
ΠΠ°Π»Π΅Π΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΉ (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄Π°ΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅) ΠΏΡΠΈΠΌΠ΅Ρ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠΊΡΡΠ³Π»Π΅Π½ΠΈΠ΅ ΡΠ³Π»ΠΎΠ² ΡΠΎΡΠΌΡ ΠΈ ΠΊΠ½ΠΎΠΏΠΎΠΊ Π½Π° Π½Π΅ΠΉ, ΡΠΎ Π΅ΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊ Π½ΠΈΠΌ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΎΡΡΠ΅ΡΠ΅Π½ΠΈΡ Π² ΡΠΎΡΠΌΠ΅ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ° Ρ ΠΎΠΊΡΡΠ³Π»Π΅Π½Π½ΡΠΌΠΈ ΡΠ³Π»Π°ΠΌΠΈ. ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΡΠΎΠ±ΡΡΠΈΡ FormCreate (Π»ΠΈΡΡΠΈΠ½Π³ 1.11).
...ΠΠΈΡΡΠΈΠ½Π³ 1.11.
ΠΠΊΠ½ΠΎ ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ Ρ ΠΎΠΊΡΡΠ³Π»Π΅Π½Π½ΡΠΌΠΈ ΠΊΡΠ°ΡΠΌΠΈ
procedure TfrmRoundRect.FormCreate(Sender: TObject);
var
formRgn, but1Rgn, but2Rgn, but3Rgn: HRGN;
begin
//Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΡΠ΅Π³ΠΈΠΎΠ½Ρ Π΄Π»Ρ ΠΊΠ½ΠΎΠΏΠΎΠΊ
but1Rgn:= CreateRoundRectRgn(0, 0, Button1.Widthβ1,
Button1.Heightβ1,
Button1.Width div 5,
Button1. Height div 5);
SetWindowRgn(Button1.Handle, but1Rgn, False);
but2Rgn:= CreateRoundRectRgn(0, 0, Button2.Widthβ1,
Button2.Heightβ1,
Button2.Width div 5,
Button2.Height div 5);
SetWindowRgn(Button2.Handle, but2Rgn, False);
but3Rgn:= CreateRoundRectRgn(0, 0, Button3.Widthβ1,
Button3.Heightβ1,
Button3.Width div 5,
Button3.Height div 5);
SetWindowRgn(Button3.Handle, but3Rgn, False);
//Π Π΅Π³ΠΈΠΎΠ½ Π΄Π»Ρ ΠΎΠΊΠ½Π°
formRgn:= CreateRoundRectRgn(0, 0, Widthβ1, Heightβ1,
Width div 5, Height div 5);
SetWindowRgn(Handle, formRgn, False);
end;
Π Π»ΠΈΡΡΠΈΠ½Π³Π΅ 1.11 ΡΠ°Π·ΠΌΠ΅ΡΡ ΠΎΠΊΡΡΠ³Π»ΡΡΡΠΈΡ ΡΠ»Π»ΠΈΠΏΡΠΎΠ² Π²ΡΡΠΈΡΠ»ΡΡΡΡΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° (20 % ΠΎΡ ΡΠΈΡΠΈΠ½Ρ ΠΈ 20 % ΠΎΡ Π²ΡΡΠΎΡΡ). ΠΡΠΎ ΡΠΌΠΎΡΡΠΈΡΡΡ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΠΊΡΠ°ΡΠΈΠ²ΠΎ. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ Π΄Π»Ρ ΡΠΈΡΠΈΠ½Ρ ΠΈ Π²ΡΡΠΎΡΡ ΡΠΊΡΡΠ³Π»ΡΡΡΠΈΡ ΡΠ»Π»ΠΈΠΏΡΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°Π±ΠΎΡΡ Π»ΠΈΡΡΠΈΠ½Π³Π° 1.11 ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π½Π° ΡΠΈΡ. 1.6.
Π ΠΈΡ. 1.6. ΠΠΊΠ½ΠΎ ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ Ρ ΠΎΠΊΡΡΠ³Π»Π΅Π½Π½ΡΠΌΠΈ ΠΊΡΠ°ΡΠΌΠΈ
Π’Π΅ΠΏΠ΅ΡΡ ΡΠ°ΠΌΡΠΉ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΉ ΠΈΠ· ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² β ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠΊΠ½Π° ΠΈ ΠΊΠ½ΠΎΠΏΠΎΠΊ Π² ΡΠΎΡΠΌΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΎΠ², Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ: ΠΎΠΊΠ½Π° Π² ΡΠΎΡΠΌΠ΅ Π·Π²Π΅Π·Π΄Ρ, ΠΊΠ½ΠΎΠΏΠΎΠΊ Π² ΡΠΎΡΠΌΠ΅ ΡΡΠ΅ΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ°, ΠΏΡΡΠΈβ ΠΈ ΡΠ΅ΡΡΠΈΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ° (ΡΠΈΡ. 1.7).
Π ΠΈΡ. 1.7. ΠΠΊΠ½ΠΎ ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π² ΡΠΎΡΠΌΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΎΠ²Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΠΎΠ½ΠΎΠ² Π΄Π»Ρ ΠΎΠ±Π»Π°ΡΡΠ΅ΠΉ ΠΎΡΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΠΎΡΠΌΡ, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π½Π° ΡΠΈΡ. 1.7, Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ (Π»ΠΈΡΡΠΈΠ½Π³ 1.12).
...ΠΠΈΡΡΠΈΠ½Π³ 1.12. ΠΠΊΠ½ΠΎ ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π² ΡΠΎΡΠΌΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΎΠ²
procedure TfrmPoly.FormCreate(Sender: TObject);
var
points: array [0..5] of TPoint;
formRgn, but1Rgn, but2Rgn, but3Rgn: HRGN;
begin
//Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΡΠ΅Π³ΠΈΠΎΠ½Ρ Π΄Π»Ρ ΠΎΠΊΠ½Π° ΠΈ ΠΊΠ½ΠΎΠΏΠΎΠΊ
//..ΡΠ΅ΡΡΠΈΡΠ³ΠΎΠ»ΡΠ½Π°Ρ ΠΊΠ½ΠΎΠΏΠΊΠ°
Make6Angle(Button1.Width, Button1.Height, points);
but1Rgn:= CreatePolygonRgn(points, 6, WINDING);
SetWindowRgn(Button1.Handle, but1Rgn, False);
//..ΡΡΠ΅ΡΠ³ΠΎΠ»ΡΠ½Π°Ρ ΠΊΠ½ΠΎΠΏΠΊΠ°
Make3Angle(Button2.Width, Button2.Height, points);
but2Rgn:= CreatePolygonRgn(points, 3, WINDING);
SetWindowRgn(Button2.Handle, but2Rgn, False);
//..ΠΏΡΡΠΈΡΠ³ΠΎΠ»ΡΠ½Π°Ρ ΠΊΠ½ΠΎΠΏΠΊΠ°
Make5Angle(Button3.Width, Button3.Height, points);
but3Rgn:= CreatePolygonRgn(points, 5, WINDING);
SetWindowRgn(Button3.Handle, but3Rgn, False);
//..ΡΠΎΡΠΌΠ° Π² Π²ΠΈΠ΄Π΅ Π·Π²Π΅Π·Π΄Ρ
MakeStar(Width, Height, points);
formRgn:= CreatePolygonRgn(points, 5, WINDING);
SetWindowRgn(Handle, formRgn, False);
end;
ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ΅Π³ΠΈΠΎΠ½ΠΎΠ² Π² ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π»ΠΈΡΡΠΈΠ½Π³Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡ Π΄Π»Ρ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΠ²Π° points ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°ΠΌΠΈ ΡΠΎΡΠ΅ΠΊ-Π²Π΅ΡΡΠΈΠ½ ΠΌΠ½ΠΎΠ³ΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΎΠ² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°. ΠΡΠ΅ ΡΡΠΈ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ, ΠΏΠΎΠΌΠΈΠΌΠΎ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΡΠ°ΠΌ ΠΌΠ°ΡΡΠΈΠ² points, ΡΠΈΡΠΈΠ½Ρ ΠΈ Π²ΡΡΠΎΡΡ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ°, Π² ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π²ΠΏΠΈΡΠ°Π½ ΠΌΠ½ΠΎΠ³ΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ. ΠΡΠΎΡΠ΅Π΄ΡΡΠ° ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΡΠ΅ΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ° ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 1.13.
...ΠΠΈΡΡΠΈΠ½Π³ 1.13. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΡΠ΅ΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ°
procedure Make3Angle(width, height: Integer; var points: array
of TPoint);
begin
points[0].X:= 0;
points[0].Y:= height β 1;
points[1].X:= width div 2;
points[1].Y:= 0;
points[2].X:= width β 1;
points[2].Y:= height β 1;
end;
Π Π»ΠΈΡΡΠΈΠ½Π³Π΅ 1.14 ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π° ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ΅ΡΡΠΈΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ°.
...ΠΠΈΡΡΠΈΠ½Π³ 1.14.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ΅ΡΡΠΈΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ°
procedure Make6Angle(width, height: Integer; var points: array
of TPoint);
begin
points[0].X:= 0;
points[0].Y:= height div 2;
points[1].X:= width div 3;
points[1].Y:= 0;
points[2].X:= 2 * (width div 3);
points[2].Y:= 0;
points[3].X:= width β 1;
points[3].Y:= height div 2;
points[4].X:= 2 * (width div 3);
points[4].Y:= height β 1;
points[5].X:= width div 3;
points[5].Y:= height β 1;
end;
ΠΠΈΡΡΠΈΠ½Π³ 1.15 ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΡΡΠΈΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ° (Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ³ΠΎ).
...ΠΠΈΡΡΠΈΠ½Π³ 1.15.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡΡΠΈΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ°
procedure Make5Angle(width, height: Integer; var points: array
of TPoint);
var a: Integer; //Π‘ΡΠΎΡΠΎΠ½Π° ΠΏΡΡΠΈΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ°
begin
a:= width div 2;
points[0].X:= a;
points[0].Y:= 0;
points[1].X:= width β 1;
points[1].Y:= a div 2;
points[2].X:= 3 * (a div 2);
points[2].Y:= height β 1;
points[3].X:= a div 2;
points[3].Y:= height β 1;
points[4].X:= 0;
points[4].Y:= a div 2;
end;
ΠΡΡΠΈΡΠ³ΠΎΠ»ΡΠ½Π°Ρ Π·Π²Π΅Π·Π΄Π°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠ°Ρ ΠΊΠ°ΠΊ ΠΎΠ±Π»Π°ΡΡΡ ΠΎΡΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΠΎΡΠΌΡ, ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 1.15 ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Make5Angle. ΠΠΎΡΠ»Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ Π²Π΅ΡΡΠΈΠ½ ΠΏΡΡΠΈΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ°, ΡΡΠΎΠ±Ρ ΠΈΡ ΠΎΠ±Ρ ΠΎΠ΄ ΠΏΡΠΈ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠΈ ΡΠ΅Π³ΠΈΠΎΠ½Π° Π²ΡΠΏΠΎΠ»Π½ΡΠ»ΡΡ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ ΡΠΈΡΡΠ΅ΡΡΡ Π·Π²Π΅Π·Π΄Π° ΠΊΠ°ΡΠ°Π½Π΄Π°ΡΠΎΠΌ Π½Π° Π±ΡΠΌΠ°Π³Π΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, 1-3-5-2-4) (Π»ΠΈΡΡΠΈΠ½Π³ 1.16).
...ΠΠΈΡΡΠΈΠ½Π³ 1.16.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡΡΠΈΡΠ³ΠΎΠ»ΡΠ½ΠΎΠΉ Π·Π²Π΅Π·Π΄Ρ
procedure MakeStar(width, height: Integer; var points: array
of TPoint);
begin
Make5Angle(width, height, points);
//ΠΡΠΈ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠΈ Π·Π²Π΅Π·Π΄Ρ ΡΠΎΡΠΊΠΈ ΠΏΡΡΠΈΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ° ΠΎΠ±Π²ΠΎΠ΄ΡΡΡΡ Π½Π΅ ΠΏΠΎ
//ΠΏΠΎΡΡΠ΄ΠΊΡ,Π° ΡΠ΅ΡΠ΅Π· ΠΎΠ΄Π½Ρ
Swap(points[1], points[2]);
Swap(points[2], points[4]);
Swap(points[3], points[4]);
end;
ΠΡΠΎΡΠ΅Π΄ΡΡΠ° MakeStart (Π»ΠΈΡΡΠΈΠ½Π³ 1.16) ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Swap, ΠΌΠ΅Π½ΡΡΡΡΡ ΠΌΠ΅ΡΡΠ°ΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄Π²ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΡΡ Π² Π½Π΅Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ². ΠΡΠΎΡΠ΅Π΄ΡΡΠ° Swap ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ ΡΡΠ΅Π·Π²ΡΡΠ°ΠΉΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ ΠΈ ΠΏΠΎΡΠΎΠΌΡ Π² ΡΠ΅ΠΊΡΡΠ΅ ΠΊΠ½ΠΈΠ³ΠΈ Π½Π΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ.
ΠΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ΅Π³ΠΈΠΎΠ½Ρ
ΠΡ ΡΠΆΠ΅ Π½Π°ΡΡΠΈΠ»ΠΈΡΡ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΎΡΡΡΠ΅ ΡΠ΅Π³ΠΈΠΎΠ½Ρ. ΠΠ΄Π½Π°ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΡΠΌ ΡΠ΅Ρ ΡΠΎΡΠΌ ΠΎΠΊΠΎΠ½, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°ΡΡΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π»ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π½Π΅ΡΠ»ΠΎΠΆΠ½ΠΎΠ³ΠΎ ΡΠ΅Π³ΠΈΠΎΠ½Π° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΎΡΡΠ΅ΡΠ΅Π½ΠΈΡ. ΠΡΠΈΡΠ»ΠΎ Π²ΡΠ΅ΠΌΡ Π·Π°Π½ΡΡΡΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ΠΌ ΠΎΠΊΠΎΠ½ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ ΡΠΎΡΠΌΡ, ΠΏΡΠΈΠΌΠ΅Π½ΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΡΠ΅ ΡΠ°Π½Π΅Π΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π°Π΄ ΡΠ΅Π³ΠΈΠΎΠ½Π°ΠΌΠΈ.
Β«ΠΡΡΡΠ²Π°ΡΒ» ΡΠΎΡΠΌΠ°
ΠΡΠΎΡ ΠΏΡΠΎΡΡΠ΅ΠΉΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠΎΠΌΠ½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΡΡΠΈ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π»Ρ Π·Π½Π°ΠΊΠΎΠΌΡΡΠ²Π° Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΠΌΠΈ Π½Π°Π΄ ΡΠ΅Π³ΠΈΠΎΠ½Π°ΠΌΠΈ. ΠΠ΄Π΅ΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Π° ΠΈΠ· Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ β ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ XOR Π΄Π»Ρ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Β«Π΄ΡΡΠΎΠΊΒ» Π² ΡΠΎΡΠΌΠ΅ (ΡΠΈΡ. 1.8).
Π ΠΈΡ. 1.8. Β«ΠΡΡΠΊΠΈΒ» Π² ΡΠΎΡΠΌΠ΅
ΠΠ° ΡΠΈΡ. 1.8 ΡΠ²Π½ΠΎ Π²ΠΈΠ΄Π½ΠΎ, ΠΊΠ°ΠΊ Π² Β«Π΄ΡΡΠΊΠ°Ρ Β» ΠΏΡΠΎΡΠ²Π΅ΡΠΈΠ²Π°Π΅ΡΡΡ ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΠΎΠΊΠΎΠ½ ΡΡΠ΅Π΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Delphi. ΠΡΠΈ ΡΡΠΎΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΡ ΠΌΡΡΠΈ, ΠΊΠΎΠ³Π΄Π° ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π½Π°Π΄ Β«Π΄ΡΡΠΊΠΎΠΉΒ», ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π½Π΅ Π½Π°ΡΠ΅ ΠΎΠΊΠ½ΠΎ, Π° ΡΠ΅, ΡΠ°ΡΡΡ ΠΊΠΎΡΠΎΡΡΡ Π²ΠΈΠ΄Π½Π° Π² Β«Π΄ΡΡΠΊΠ΅Β». ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΊΠΎΠ΄, ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡΠΈΠΉ ΠΊ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΎΡΠΌΡ ΡΡΠΎΠ»Ρ Π½Π΅ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 1.17.
...ΠΠΈΡΡΠΈΠ½Π³ 1.17.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Β«Π΄ΡΡΠΎΠΊΒ» Π² ΡΠΎΡΠΌΠ΅
procedure TfrmHole.FormCreate(Sender: TObject);
var
rgn1, rgn2: HRGN; //"Π Π΅Π³ΠΈΠΎΠ½Ρ-Π΄ΡΡΠΊΠΈ" Π² ΡΠΎΡΠΌΠ΅
formRgn: HRGN;
begin
//Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΠΎΠ½Π° Π΄Π»Ρ ΡΠΎΡΠΌΡ
formRgn := CreateRectRgn(0, 0, Width β 1, Height β 1);
//Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΠΎΠ½ΠΎΠ² Π΄Π»Ρ Β«Π΄ΡΡΠΎΠΊΒ»
rgn1 := CreateEllipticRgn(10, 10, 100, 50);
rgn2 := CreateRoundRectRgn(10, 60, 200, 90, 10, 10);
//Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Β«Π΄ΡΡΠΎΠΊΒ» Π² ΡΠ΅Π³ΠΈΠΎΠ½Π΅ ΡΠΎΡΠΌΡ
CombineRgn(formRgn, formRgn, rgn1, RGN_XOR);
CombineRgn(formRgn, formRgn, rgn2, RGN_XOR);
SetWindowRgn(Handle, formRgn, True);
//Π Π΅Π³ΠΈΠΎΠ½Ρ Π΄Π»Ρ Β«Π΄ΡΡΠΎΠΊΒ» Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π½ΡΠΆΠ½Ρ
DeleteObject(rgn1);
DeleteObject(rgn2);
end;
Π‘Π»ΠΎΠΆΠ½Π°Ρ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ ΡΠ΅Π³ΠΈΠΎΠ½ΠΎΠ²
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΡΠΈΡΠ»Π° ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΠΎΠ³ΠΎ, Π½ΠΎ ΠΈ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°. ΠΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π½Π°Π΄ ΡΠ΅Π³ΠΈΠΎΠ½Π°ΠΌΠΈ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΎΡΠΌΡ, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π½Π° ΡΠΈΡ. 1.9 (Π±Π΅Π»ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ β ΡΡΠΎ Π²ΡΡΠ΅Π·Π°Π½Π½ΡΠ΅ ΡΠ°ΡΡΠΈ ΡΠΎΡΠΌΡ).
Π ΠΈΡ. 1.9. Π‘Π»ΠΎΠΆΠ½Π°Ρ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ ΡΠ΅Π³ΠΈΠΎΠ½ΠΎΠ²
ΠΡΠΎΡΠ΅Π΄ΡΡΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π°Π΄ ΡΠ΅Π³ΠΈΠΎΠ½Π°ΠΌΠΈ, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π° Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 1.18.
...ΠΠΈΡΡΠΈΠ½Π³ 1.18.
Π‘Π»ΠΎΠΆΠ½Π°Ρ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ ΡΠ΅Π³ΠΈΠΎΠ½ΠΎΠ²
procedure TfrmManyRgn.FormCreate(Sender: TObject);
var
r1, r2, r3, r4, r5, r6, r7: HRGN;
formRgn: HRGN;
butRgn: HRGN;
begin
//Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΠΎΠ½ΠΎΠ²
r1 := CreateRoundRectRgn(100, 0, 700, 400, 40, 40);
r2 := CreateRectRgn(280, 0, 300, 399);
r3 := CreateRectRgn(500, 0, 520, 399);
r4 := CreateEllipticRgn(140, 40, 240, 140);
r5 := CreateEllipticRgn(0, 300, 200, 500);
r6 := CreateEllipticRgn(500, 40, 600, 140);
r7 := CreateEllipticRgn(540, 40, 640, 140);
//ΠΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
//..ΡΠ°Π·ΡΠ΅Π·Ρ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΡΠ΅Π³ΠΈΠΎΠ½Π΅
CombineRgn(r1, r1, r2, RGN_XOR);
CombineRgn(r1, r1, r3, RGN_XOR);
//..ΠΊΡΡΠ³Π»Π°Ρ Β«Π΄ΡΡΠΊΠ°Β» Π² ΠΏΡΠ°Π²ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Π΅
CombineRgn(r1, r1, r4, RGN_XOR);
//..ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΊΡΡΠ³Π° Π² Π»Π΅Π²ΠΎΠΉ Π½ΠΈΠΆΠ½Π΅ΠΉ ΡΠ°ΡΡΠΈ
CombineRgn(r1, r1, r5, RGN_OR);
//..ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Β«Π΄ΡΡΠΊΠΈΒ» Π² ΡΠΎΡΠΌΠ΅ ΠΏΠΎΠ»ΡΠΌΠ΅ΡΡΡΠ°
CombineRgn(r7, r7, r6, RGN_DIFF);
CombineRgn(r1, r1, r7, RGN_XOR);
formRgn := CreateRectRgn(0, 0, 0, 0);
CombineRgn(formRgn, r1, 0, RGN_COPY);
DeleteObject(r1);
DeleteObject(r2);
DeleteObject(r3);
DeleteObject(r4);
DeleteObject(r5);
DeleteObject(r6);
DeleteObject(r7);
//Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΡΡΠ³Π»ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π·Π°ΠΊΡΡΡΠΈΡ
butRgn := CreateEllipticRgn(50, 50, 150, 150);
SetWindowRgn(Button1.Handle, butRgn, False);
SetWindowRgn(Handle, formRgn, True);
end;
Π Π»ΠΈΡΡΠΈΠ½Π³Π΅ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠ°ΠΊΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΈΡΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ΅Π³ΠΈΠΎΠ½Π° ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Ρ. Π ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡ ΡΡΠ°ΡΡΠ²ΡΡΡ ΡΠ΅ΠΌΡ ΡΠ΅Π³ΠΈΠΎΠ½ΠΎΠ². Π Π°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡ ΡΠ΅Π³ΠΈΠΎΠ½ΠΎΠ² ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΡΠΈΡ. 1.10.