It works for me only when Pen.Width > 1. When Pen.Width=1, it draws always black solid line (Lazarus v1.2.6, Win XP).
Canvas.Pen.Color := clRed;
Canvas.Pen.Style := psPattern;
SetLength(aPenPattern, 2);
aPenPattern[0] := 3; //line [pixels]
aPenPattern[1] := 3; //space [pixels]
Canvas.Pen.SetPattern(aPenPattern);
Canvas.Pen.Width := 1{2};
Canvas.Line(50,50,100,50);