thanks lainz. Full code for Font.Size:
RealFontSize := Round((- GetFontData(b.Font.Handle).Height * 72 / b.Font.PixelsPerInch))
Tested only on Windows 10 with different scale and with multimonitor DPI (Font.Size is allways same). Font.Height is changing to real pixels.
Update: Lol now I see "bug" in my code, forgot Font.
Reference.Handle from your code and code works. What's difference?