Well, it's basicly what you guys offered me above:

[pascal]Procedure TConsole.FillRectDarken(Const DestRect: TRect; Const DarkenBy: Integer);
Var
Color: TColor;
R, G, B, I, N: Integer;
Begin

For I := DestRect.Top to DestRect.Bottom Do
For N := DestRect.Left to DestRect.Right Do
Begin
color := gmScreen.Surface.Pixels[N,I];
r:= color and $ff;
g:= color shr 8 and $ff;
b:= color shr 16;
dec(r, DarkenBy);
dec(g, DarkenBy);
dec(b, DarkenBy);
if r<0 then r:= 0;
if g<0 then g:= 0;
if b<0 then b:= 0;
gmScreen.Surface.Pixels[N,I]:= r and (g shl and (b shl 16);
End;

End;[/pascal]