Что-то я не понимаю... 
 Написал такое!  
Code
Function MyTrunc(X: Single): LongInt; 
 Var i: LongInt; 
 begin 
   For i:=0 to 40 do 
     If X > i then result := i; 
   If X > 40 then result := 40; 
 end; 
 procedure redraw3(FFTData : TFFTData; X, Y : Integer); 
         var i, YPos, DrawPoint : LongInt; YVal : Single; 
        begin 
         Form1.DXDraw1.Surface.Canvas.Pen.Color := clAqua; 
          for i := 0 to 128 do begin 
            YVal := Abs(FFTData[(i * 1) + 5]); 
            if YVal > 40 then YVal := 40; 
            YPos := MyTrunc(YVal); 
            if YPos > 40 then YPos := 40; 
            DrawPoint := YPos; 
            begin 
              Form1.DXDraw1.Surface.Canvas.MoveTo(X + i, Y + 40); 
              Form1.DXDraw1.Surface.Canvas.LineTo(X + i, Y + 40 - DrawPoint); 
            end; 
          end; 
 end;
 Ну чему тут глючить? Кто угадает, где выходит ошибка? 