76 lines
1.8 KiB
ObjectPascal
76 lines
1.8 KiB
ObjectPascal
// Èíäåêñíûå ñâîéñòâà. Ìàññèâ öâåòíûõ êâàäðàòîâ
|
|
uses GraphABC;
|
|
|
|
const
|
|
sz = 50;
|
|
dim = 10;
|
|
delay = 500;
|
|
|
|
type
|
|
///
|
|
VisualArray = class
|
|
private
|
|
a: array of Color;
|
|
procedure SetItem(i: integer; x: Color); // Ïðîöåäóðà, óñòàíàâëèâàþùàÿ öâåò i-òîãî êâàäðàòà
|
|
begin
|
|
if (i<0) or (i>=a.Length) then
|
|
raise new System.ArgumentException('Âûõîä çà ãðàíèöû èçìåíåíèÿ èíäåêñà: '+IntToStr(i));
|
|
a[i] := x;
|
|
Draw(i);
|
|
end;
|
|
function GetItem(i: integer): Color; // Ôóíêöèÿ, âîçâðàùàþùàÿ öâåò i-òîãî êâàäðàòà
|
|
begin
|
|
if (i<0) or (i>=a.Length) then
|
|
raise new System.ArgumentException('Âûõîä çà ãðàíèöû èçìåíåíèÿ èíäåêñà: '+IntToStr(i));
|
|
Result := a[i];
|
|
end;
|
|
public
|
|
constructor (n: integer);
|
|
begin
|
|
SetLength(a,n);
|
|
for var i:=0 to n-1 do
|
|
a[i] := clWhite;
|
|
Draw;
|
|
end;
|
|
/// Ðèñóåò i-òûé êâàäðàò
|
|
procedure Draw(i: integer);
|
|
begin
|
|
Brush.Color := a[i];
|
|
Rectangle(sz+sz*i,sz,sz+sz*(i+1)+1,sz+sz);
|
|
end;
|
|
/// Ðèñóåò ìàññèâ öâåòíûõ êâàäðàòîâ
|
|
procedure Draw;
|
|
begin
|
|
for var i:=0 to a.Length-1 do
|
|
Draw(i);
|
|
end;
|
|
/// Èíäåêñíîå ñâîéñòâî ïî óìîë÷àíèþ
|
|
property Item[i: integer]: Color read GetItem write SetItem; default;
|
|
end;
|
|
|
|
var arr: VisualArray;
|
|
|
|
begin
|
|
Window.Title := 'Èëëþñòðàöèÿ èíäåêñíûõ ñâîéñòâ';
|
|
arr := new VisualArray(dim);
|
|
SetWindowSize(sz*(dim+2),3*sz);
|
|
arr[0] := clGreen; // arr.Items[0] = arr[0] ïîñêîëüêó ñâîéñòâî Items ÿâëÿåòñÿ ñâîéñòâîì ïî óìîë÷àíèþ
|
|
Sleep(delay);
|
|
arr[1] := clBlack;
|
|
Sleep(delay);
|
|
arr[2] := clYellow;
|
|
Sleep(delay);
|
|
arr[3] := clGray;
|
|
Sleep(delay);
|
|
arr[4] := clRed;
|
|
Sleep(delay);
|
|
arr[5] := clMagenta;
|
|
Sleep(delay);
|
|
arr[6] := clBrown;
|
|
Sleep(delay);
|
|
arr[7] := clMoneyGreen;
|
|
Sleep(delay);
|
|
arr[8] := clOlive;
|
|
Sleep(delay);
|
|
arr[9] := clLinen;
|
|
end. |