Auch hier wieder ein Offscreenbitmap basteln und in einem Timer etc. auf dieses Bitmap zeichnen lassen.
Das/die Bitmaps dann in der Paintbox zeichnen.
Spectrum ist eine PaintBox ?
Ich pers. verwende keine PaintBox, ist mir zu "dumm".
Beispiel:
Delphi-Quellcode:
implementation
{$R *.dfm}
const
VisXOffset = 50;
VisYOffset = 40;
procedure TForm1.FormCreate(Sender: TObject);
begin
bmp := TBitmap.Create;
bmp.Width := 200;
bmp.Height := 80;
bmp.Canvas.Brush.Color := clBlack;
RenderVisDone := True;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if RenderVisDone
and ASSIGNED(bmp)
then
begin
RenderVis;
bitblt(Canvas.Handle, VisXOffset, VisYOffset, bmp.Width, bmp.Height,
bmp.Canvas.Handle, 0, 0, SRCCOPY);
end;
end;
procedure TForm1.RenderVis;
var
i: integer;
gt: Cardinal;
begin
RenderVisDone := False;
bmp.Canvas.FillRect(bmp.Canvas.ClipRect);
for i := 0
to bmp.Width
div 4 - 1
do
begin
gt := GetTickCount;
Windows.SetPixel(bmp.Canvas.Handle, i*4, round(bmp.Height
div 2 + sin(gt/250+i)*15),
RGB(255, 0, 0));
Windows.SetPixel(bmp.Canvas.Handle, i*4, round(bmp.Height
div 2 + sin(gt/500-i)*20),
RGB(128, 128, 255));
end;
RenderVisDone := True;
end;
end.
Man kann sich das auch in eine Classe bauen bzw. formen.
//Edit: Delphicodehighlightdingenbumensfehlfunktionskorrek tur ..