Du hast im Destruktor die Freigabe der Bitmaps vergessen.
Dann schreibst du die ganze Zeit VisBuff.Canvas ; das kostest jedesmal ein bisschen Zeit.
Ändere das mal so ab:
Delphi-Quellcode:
procedure TBass_Vis.Draw_SpectrumToCanvas(canvas:TCanvas; OffsetX, OffsetY : Integer);
begin
// hier dein ganzer Code zum Zeichen...
// statt VisBuff.Canvas.xxx nur noch canvas.xxx verwenden
...
end;
procedure TBass_Vis.Draw_Spectrum(HWND : THandle; OffsetX, OffsetY : Integer);
begin
Draw_SpectrumToCanvas(VisBuff.Canvas, OffsetX, OffsetY);
BitBlt(HWND, 0, 0, VisBuff.Width, VisBuff.Height, VisBuff.Canvas.Handle, 0, 0, srcCopy)
end;
Die Auftrennung in zwei Prozeduren macht die Sache klarer und flexibler.
Du übergibst in deinem alten Code ein Windowhandle.
Jeder der der Code liest denkt doch "wo wird das
Handle denn benützt?".
Und dann wird es doch noch in der allerletzten Zeile verwendet.
Solche überlangen Prozeduren muss man zerlegen, speziell in dem Fall wenn ein Parameter erst ganz zum Schluss verwendet wird.