Local variable are not initialised, so that code will not work. Also High returns the number of elements minus one, and if all the elements are red, j will be the number of elements, and therefore will not equal High.

[pascal]
function AllRed(A: array of TColours): Boolean;
var
i,j : Integer;
begin
j := 0; // Initialise j to zero.
for i := 0 to High(A) do
begin
if A[i] = red then
Inc(j);
end;
Result := (j = Length(A));
end;
[/pascal]

However, a better way to do this would be:

[pascal]
function AllRed(A: array of TColours): Boolean;
var
i: Integer;
begin
for i := 0 to High(A) do
begin
if (A[i] <> red) then
begin
Result := False;
Exit; // Don't bother checking futher once one non-red one is found
end;
end;
Result := True;
end;
[/pascal]

I don't see why you want to do this recursively.