So wie es klingt erstellst du die drei Objekte immer in der gleichen Instanzenvariable, also in etwa so:
Delphi-Quellcode:
var Btn: TButton;
...
procedure NewBtn;
begin
...
Btn := TButton.Create(ScrollBox);
...
end;
...
Damit wird bei jedem Aufruf von NewBtn zwar wie gewollt ein neues Button-Objekt erstellt, aber dieses "überschreibt" die jeweils vorherige Instanz. Du solltest deine Buttons in einem dyn. Array oder einer ObjectList verwalten, um auf alle erstellten Instanzen zugreifen zu können.