Hallo Ihrs
Ich habe ein kleines Problem, das mit einer Zeichenroutine zu tun hat.
Das ganze hat mit der Spectrum-Anzeige meines Players zu tun:
Go
Die Anzeige bleibt einfach irgendwann stehen (friert ein), wenn ich wie folgt vorgehe:
Delphi-Quellcode:
...
procedure TMainForm.MainTimerEvent(Sender: TObject);
begin
Spectrum.Draw;
end;
...
type
TSpectrum = class (TPanel)
...
end;
...
procedure TSpectrum.Draw;
begin
// mach was: Zeichne in Buffer
...
BitBlt(self.Canvas.Handle, 0, 0, FBuffer.Width, FBuffer.Height, FBuffer.Canvas.Handle, 0, 0, SRCCOPY);
end;
...
Wenn ich das ganze aber so mache, dann funktioniert alles Prima. Der einzige Nachteil ist, das die CPU Last ziemlich steigt (was man bei älteren CPU's merkt).
Delphi-Quellcode:
...
procedure TMainForm.MainTimerEvent(Sender: TObject);
begin
Spectrum.Invalidate;
end;
...
type
TSpectrum = class (TPanel)
...
end;
...
procedure TSpectrum.Paint;
begin
Draw;
end;
procedure TSpectrum.Draw;
begin
// mach was: Zeichne in Buffer
...
BitBlt(self.Canvas.Handle, 0, 0, FBuffer.Width, FBuffer.Height, FBuffer.Canvas.Handle, 0, 0, SRCCOPY);
end;
...
Weiss, denn einer Rat? Wird bei dem Invalidate noch irgendetwas anderes gemacht?
Danke
MFG