PageControl could be simply the container for a top-aligned ExtTabCtrl and the tabsheets (headerless), and ExtTabCtrl should be able to use tabsheets as pages (instead of TFrames like in the current page control demo).
I'd prefer a TNotebook because the PageControl appears to be more complex to me and originates from a widget control which may cause problems with custom-painting. It will allow automatic switching to dark mode, but might require some extra code for mouse-over effects.
But basically you are right. I think that besides TExtTabControl there should also be a TExtPageControl which descends from TExtTabControl and houses an internal notebook. The notebook should be linked to the TabControl in a way that any operations made with the tabs will be mirrored with the notebook pages, i.e. when a tab is added a page will be added to the notebook; when another tab is selected the notebook should switch to the corresponding page, etc. My gutfeeling tells me that it would be easier when the notebook is not accessible directly, only via methods of the TExtPageControls.
We could use characters (+, <, >) for the buttons
Great idea, plus #$E2#$9C#$95, or similar, for the cross (provided the font has it) - this would make the FInternalBtnImages obolete and will save some code.
With the distance of a few days I see also that the FInternalTabImages has an issue because it copies the images from the provided imagelist, Images. Having 10 ExtTabCtrls in a project would then mean that there are 10 copies of the original image list. This is not why an imagelist was invented. Only because of the rotated images... Maybe you should return to your original idea of extracting the required image at the required size from the Images list and paint that on the canvas, rather than letting the imagelist itself draw it.
i see that the close button cross will be white - in dark mode only, and only when using the OnDrawTab callback. Before it had been red.
No prob, but i simply won't understand yet why, and if/how one could control that.
I saw that the black button icons were not visible any more in dark mode, and therefore I added a routine to recolor the images by replacing all pixels having alpha <> 0 with some other color. (of course this is useful only for monochrome images) This is done when dark mode is detected. Of course, processing of the red cross could be excluded from this procedure. Alternatively, when you need a specific "close" icon you can provide it always in the Images, an imagelist, and specify its imageindex in the ButtonImages.