74 lines
2.1 KiB
ObjectPascal
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. |