Okay I looked on my hdd for the source of the 2D starfield and here are the usefull pieces

[pascal]
var StarField : Array[0..STARS] of TStar;
StarGraphics: Array[0..3] Of TDirectDrawSurface;

Procedure TForm1.InitStarField();
var D : Integer;
Begin
Randomize;

For D := 1 To STARS do
Begin
StarField[D].X := Random(VideoModeX);
StarField[D].Y := Random(VideoModeY);
StarField[D].Speed := 1 + Random(9);
StarField[D].Size := Random(3);
End;

StarGraphics[0] := TDirectDrawSurface.Create(DXDraw1.DDraw);
StarGraphics[0].LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Ster1.bmp');

StarGraphics[1] := TDirectDrawSurface.Create(DXDraw1.DDraw);
StarGraphics[1].LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Ster2.bmp');

StarGraphics[2] := TDirectDrawSurface.Create(DXDraw1.DDraw);
StarGraphics[2].LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Ster3.bmp');
End;


Procedure TForm1.DrawStarField();
var D : Integer;
Begin
For D := 1 To STARS do
Begin
DXDraw1.Surface.Draw(StarField[D].X, StarField[D].Y, StarGraphics[StarField[D].Size]);
StarField[D].Y := StarField[D].Y + StarField[D].Speed;

If StarField[D].Y >= VideoModeY Then
Begin
StarField[D].Y := 0;
StarField[D].X := Random(VideoModeX);
DXDraw1.Surface.Draw(StarField[D].X, StarField[D].Y, StarGraphics[StarField[D].Size]);
End;
End;
End;
[/pascal]

Oh a usefull remark might be that you can replace the VideoModeX, VideoModeY with Screen.Width, Screen.Height!

call the InitStarField(); before any drawing thing and call DrawStarField(); in your main gameloop!

Hope this helps...