"SigRoundRectKunde.Repaint"... das stößt intern doch "verzögert/async" ein neuzeichnen an... da ist es keine gute Idee gleich danach weitere harte Canvas Zugriffe zu machen (Unter Windows könnte man da böse hinter das Repaint ein Application.ProcessMessages "zum warten" einfügen)
Code:
procedure TForm.bbSignatureKundeClearClick(Sender: TObject);
begin
FreeandNil(SignatureKunde);
SignatureKunde := TList<TSigCapRec>.Create;
SigRoundRectKunde.Canvas.Clear(SigRoundRectKunde.Fill.Color);
SigRoundRectKunde.Repaint;
SigRoundRectKunde.canvas.BeginScene;
SigRoundRectKunde.canvas.Clear(TAlphaColors.Gray);
SigRoundRectKunde.canvas.EndScene; // Crash?
end;
aus meiner Sicht logischer wäre:
Code:
procedure TForm.bbSignatureKundeClearClick(Sender: TObject);
begin
FreeandNil(SignatureKunde);
SignatureKunde := TList<TSigCapRec>.Create;
SigRoundRectKunde.canvas.BeginScene;
SigRoundRectKunde.Canvas.Clear(SigRoundRectKunde.Fill.Color); // die Zeile macht aus meiner Sicht wenig Sinn, weil danach das ja nochmal fix mit grau gemacht wird
SigRoundRectKunde.canvas.Clear(TAlphaColors.Gray);
SigRoundRectKunde.canvas.EndScene;
SigRoundRectKunde.Repaint;
end;