This repository has been archived on 2024-12-25. You can view files and clone it, but cannot push or open issues or pull requests.
2023-06-20 21:52:24 +03:00

74 lines
2.1 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
a := ArrFill(n,Color.White);
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);
Window.SetSize(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.