button[1].OnCreate:=@BuildForest;
The compiler is not lying to you. There is no OnCreate event for you to assign to. To verify, drop a TButton on the form. Have a look in the Object Inspector. There is a tab there called Events. That's the list of events (see attached).
Besides - if you look at your code, there's something wrong in your logic.
1. You create the button
button[i]:=TButton.create(form1);
Two lines later, you attempt to hook to an OnCreate.
button[1].OnCreate:=@BuildForest;
(did you mean to use an i in there, not a 1?)
This is too late. At the TButton has already been created, if the OnCreate event existed (which it doesn't for TButton), then hooking up to it at this point will achieve nothing. You needed to hook up to it BEFORE the control was created. Object Oriented code is what you most probably need, but for now, there's an easier way....
Quite simply, as you are the person creating the TButton, you can fire the "OnCreate" yourself...
for i:=1 to 10 do
begin
button[i]:=TButton.create(form1);
button[i].parent:=panel[1];
button[i].enabled:=false;
BuildForest(button[i]);
end;
Finally, please use [ code ] tags instead of [ quote ] tags when posting code. [ quote ] tags gets confused when you use [ i ], they think you want to start italics
(Don't use spaces in the tags, I added them to trick the forum into displaying the text instead of rendering them as tags...)