Afaik the LCL uses a hack to link base LCL classes to the corresponding widgetset.
IOW, not properly done using inheritance, but with casting and/or VMT point manipulation.
Marc tried to explain it once, but I can't remember the exact details anymore
Correct, I'll try to give a simple example (by heart)
Imagine you have a class hierarchy like: TControl -> TWinControl -> TButton
In the widgetset we have the same (abstract) hierarchy: TWSControl -> TWSWinControl -> TWSButton
Each widgetset can "override" a TWSxxx class to implement its functionality:
TWSWinControl -> TWSWin32WinControl
TWSButton -> TWSWin32Button
however with normal inheritance TWSWin32Button is derived from TWSButton/TWSWinControl, but not from TWSWin32WinControl. So the TWSWin32WinControl implementation of TWSWin32Button is missing.
So at runtime, a virtual class hierarchy is created in memory: TWSControl -> TWSWinControl -> TWSWin32WinControl -> TWSButton -> TWSWin32Button