On 2016-04-10 00:02, Graeme Geldenhuys wrote: > Here is verbosely commented code that draws a rectangle around the Page > Title text.
Apologies, here is the correct code. ================================= { Page title } P.SetFont(FtText1, 23); P.SetColor(clBlack, false); P.WriteUTF8Text(25, 20, 'Sample Text'); { draw a rectangle around the Page Title text } lPt1.X := 25; // units in MM lPt1.Y := 20; // units in MM lFntPtSize := 23; lFC := gTTFontCache.Find('FreeSans', False, False); if not Assigned(lFC) then raise Exception.Create('FreeSans font not found'); lFntInfo := lFC.GetFontData; { result is in pixels } lHeight := lFntInfo.CapHeight * lFntPtSize * gTTFontCache.DPI / (72 * lFntInfo.Head.UnitsPerEm); { convert pixels to mm as our PDFPage.UnitOfMeasure is set to mm. } lTextHeightInMM := (lHeight * 25.4) / gTTFontCache.DPI; lWidth := lFC.TextWidth('Sample Text', lFntPtSize); { convert the Font Units to Millimeters } lTextWidthInMM := (lWidth * 25.4) / gTTFontCache.DPI; { result is in pixels } lHeight := Abs(lFntInfo.Descender) * lFntPtSize * gTTFontCache.DPI / (72 * lFntInfo.Head.UnitsPerEm); { convert pixels to mm as you PDFPage.UnitOfMeasure is set to mm. } lDescenderHeightInMM := (lHeight * 25.4) / gTTFontCache.DPI; { adjust the Y coordinate for the font Descender, because WriteUTF8Text draws on the baseline. Also adjust the TextHeight because CapHeight doesn't take into account the Descender. } P.SetColor(clRed, true); P.DrawRect(lPt1.X, lPt1.Y+lDescenderHeightInMM, lTextWidthInMM, lTextHeightInMM+lDescenderHeightInMM, 1, false, true); lFntInfo.Free; ================================= Regards, - Graeme - -- fpGUI Toolkit - a cross-platform GUI toolkit using Free Pascal http://fpgui.sourceforge.net/ My public PGP key: http://tinyurl.com/graeme-pgp -- _______________________________________________ Lazarus mailing list Lazarus@lists.lazarus.freepascal.org http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus