Well, for a start...
:=('£',Count,': ',B(Count));
This simply isn't Pascal code and will never compile. That individual part of the statement can be re-written a few ways...
:='£' + IntToStr(Count)+': B(' + IntToStr(Count)+')';
or
:=Format('£ %d Count: B(%d)', [Count, Count]);
But this won't solve all your problems...
I have absolutely no idea what you're doing here, or how it is pertinent to the rest of the code example :-(
B20:=Total DIV 20;
A20:=Total DIV 20;
B10:=A20 DIV 10;
A10:=A20 DIV 10;
B5:=A10 DIV 5;
A5:=A10 DIV 5;
B2:=A5 DIV 2;
A2:=A5 DIV 2;
B1:=A2 DIV 1;
A1:=A2 DIV 1;
And here, you're using an array that hasn't been populated...
Button(i)
There's a possibility that you think that calling for instance Button(0) will access the first button in your form. This isn't the case. There are ways to set up arrays to reference designated controls, and I'll post an example if you like. But for now I would recommend that you set the caption of each button individually.
Button1.Caption := Format('£ %d Count: B(%d)', [0, 0]);
(@Blaazen is a faster typer that I
He show's one of the ways you could set that array up)
Yet to my dismay I was confronted with the same error message when I changed to use buttons.
In this instance you haven't told us what the error is, so this limits our ability to help you. I'm guessing though that you got a series of errors, the first one being the incorrect string concatenation, and the subsequent ones being button() array not defined. In future, please let us know exactly what errors you're getting, and this will help us resolve your issue faster.