@Hammer: I'm using a radeon 8500.
The flickering is especially visible underneath the texts. Perhaps you could try to replace it with an image and remove the text.

@cairnswm: Thats an interesting idea! Write the text to a surface once and then use that image over and over again.

This is how it would work:
[pascal]
(..)
var
Form1: TForm1;
textImg : TDirectDrawsurface;

implementation

{$R *.DFM}

procedure TForm1.DXDraw1Initialize(Sender: TObject);
var counter : byte;
begin
randomize;
textImg := TDirectDrawSurface.Create(DXDraw1.DDraw);
textImg.SetSize(250,150);
TextImg.Fill(0);
TextImg.Canvas.Font.Color:= clred;
TextImg.Canvas.brush.Style := bsclear;
for counter := 1 to 10 do
TextImg.Canvas.TextOut(random(50)+10,(15*counter), 'A GameProgrammer''s Journey');
TextImg.Canvas.Release;

dxdraw1.surface.Canvas.Font.Color:= clblue;
dxdraw1.surface.Canvas.brush.Style := bsclear;

dxtimer1.Enabled:=true;
end;

procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer);
begin
dxdraw1.surface.Fill(0);
dxdraw1.Surface.Draw(0,0, TextImg.ClientRect,TextImg,true);
dxdraw1.Surface.canvas.textout(form1.width-50,10,'fps:'+inttostr(dxtimer1.framerate));
dxdraw1.Surface.canvas.release;
dxdraw1.flip;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
textImg.free;
end;

end.[/pascal]

Of course this solution does not work when you constantly need to change the text, like the fps text in my sample.

Btw, since this still is a topic on how to deal with fps. Notice that I init the font color and brush of the dxdraw canvas in the DXDraw1Initialize procedure. I've seen quite a few people doing this in the dxtimer procedure.

@Lion. Not necessarily. As you can see, the text is written at startup. It doesn't really matter how long it takes. After the text is written onto the image, you can simply use the image to display the text.

And in case you need to change the text, (not continuesly of course) you can write a procedure to erase the image and write a new text on to it.