Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Как сделать анимацию немерцающей?

01.01.2007

Мерцание возникает, когда цвет точки меняется два раза подряд. Например, правильнее объект при его перемещении стирать и затем рисовать на новом месте не на экране, а в памяти, и выводить на форму уже готовое изображение поверх предыдущего. В таком случае смена цветов на экране происходит только один раз.

var
  bm
: TBitMap;
 
procedure TForm1
.FormCreate(Sender: TObject);
begin
  bm
:= TBitMap.Create;
  bm
.Width := Form1.ClientWidth;
  bm
.Height := Form1.ClientHeight;
 
with bm.Canvas do
 
begin
   
Font.name := 'Arial';
   
Font.Size := 50;
   
Font.Color := clBlue;
 
end;
  Timer1
.Interval := 100;
end;
 
procedure TForm1
.Timer1Timer(Sender: TObject);
var
  s
: string;
 
Hour, Min, Sec, MSec: Word;
begin
 
DecodeTime(Time, Hour, Min, Sec, MSec);
 
with bm.Canvas do
 
begin
   
Brush.Style := bsSolid;
   
Brush.Color := clWhite;
   
FillRect(ClipRect);
    s
:= TimeToStr(Time);
   
TextOut((bm.Width - TextWidth(s)) div 2,
   
(bm.Height - TextHeight(s)) div 2, s);
   
Pen.Mode := pmMask;
   
Pen.Width := 20;
   
Pen.Color := clLime;
   
Brush.Style := bsClear;
   
Rectangle(bm.Width div 2 - (MSec * bm.Width) div 5000,
    bm
.Height div 2 - (MSec * bm.Height) div 5000,
    bm
.Width div 2 + (MSec * bm.Width) div 5000,
    bm
.Height div 2 + (MSec * bm.Height) div 5000);
 
end;
  Form1
.Canvas.Draw(0, 0, bm);
end;

Взято с https://delphiworld.narod.ru