var fButton: TButton;
selfh:HWND;
begin
fButton := TButton.Create(Selfh); //self to selfh for threadsafe...TButton.Create() only takes TComponent object as parameter. There is no overloaded constructor that would accept a HWND, which in your case is even uninitialized. By your code's logic, these would be equally valid...
fButton := TButton.Create(129874124);
fButton := TButton.Create(546234234);(Of course they're not, just showing. What happens, is that you use random number as button owner.)