procedure TForm1.FormPaint(Sender: TObject); var bmp: TBitmap; i, j: Integer; b: Byte; pCol: PByte; y: Double; t: Int64; tn, tnsoft: Double; begin t := GetTickCount64; tn := (t mod 2000) / 2000; tnsoft := abs(tn - 0.5) * 2; bmp := TBitmap.Create; bmp.PixelFormat := pf24bit; bmp.Width := ClientWidth; bmp.Height := ClientHeight; try bmp.BeginUpdate(); for j := 0 to bmp.Height - 1 do begin pCol := bmp.ScanLine[j]; for i := 0 to bmp.Width - 1 do begin y := j; y := y + (tnsoft-0.5)*20*sin((i-t*0.1)*Pi*0.02); if (((i div 100) mod 2) xor ((Round(y) div 100) mod 2)) = 0 then b := 255 else b := 0; pCol^ := b; Inc(pCol); pCol^ := b; Inc(pCol); pCol^ := b; Inc(pCol); end; end; bmp.EndUpdate(); Canvas.Draw(0,0,bmp); finally bmp.Free; end; end;