Declaration
function MeasureText(Text: WideString; BoundingRect: TRect; Angle: Integer = 0): TSize;
function MeasureText(Text: WideString; Angle: Integer = 0): TSize;
Description
Returns the height and width of text using the current font. If a rect is specified then the width of the text is bounded, which may cause it to wrap.
Note:
◼MeasureText is called by
TextExtent,
TextWidth and
TextHeight
◼MeasureText is not accurate when borders are applied (using
TextStyling)
GDI+ Method:
GdipMeasureString
// Method to draw text within an area of a TIEBitmap
procedure TextOutEx(aBMP: TIEBitmap;
X, Y, W, H : Integer; const Text : String;
const sFontName : String; iFontSize : Integer; cFontColor : TColor; Style : TFontStyles;
Angle : Integer = 0;
bAntiAlias : Boolean = true; bAutoEnlarge : Boolean = False);
var
AnExtent: TSize;
Mask: TIEMask;
x1, y1, x2, y2: Integer;
CompCanvas: TIECanvas;
iAlpha: Integer;
begin
aBMP.Canvas.Font.Name := sFontName;
aBMP.Canvas.Font.Size := iFontSize;
aBMP.Canvas.Font.Color := cFontColor;
aBMP.Canvas.Font.Style := Style;
AnExtent := aBMP.IECanvas.MeasureText( Text );
if Angle <> 0 then
AnExtent := IERotatePoint2( AnExtent.cx, AnExtent.cy, Angle );
if bAutoEnlarge and (( aBMP.Width < AnExtent.cx ) or ( aBMP.Height < AnExtent.cy )) then
begin
iAlpha := 255;
if aBMP.HasAlphaChannel then
iAlpha := aBMP.Alpha[0, 0];
aBMP.Resize( iMax( aBMP.Width, AnExtent.cx ), iMax( aBMP.Height, AnExtent.cy ), Background, iAlpha);
end;
CompCanvas := aBMP.CreateROICanvas(Rect(0, 0, aBMP.Width, aBMP.Height), bAntiAlias, true, bAntiAlias);
try
if not bAntiAlias then // Cannot use together with alpha composting
CompCanvas.TextRendering := ietrTextRenderingHintSingleBitPerPixel;
CompCanvas.Brush.Color := aBMP.Canvas.Font.Color;
CompCanvas.Font.Color := aBMP.Canvas.Font.Color;
CompCanvas.Font.Name := aBMP.Canvas.Font.Name;
CompCanvas.Font.Height := aBMP.Canvas.Font.Height;
CompCanvas.Font.Style := aBMP.Canvas.Font.Style;
if ( W = 0 ) and ( H = 0 ) then
CompCanvas.DrawText( Text, X, Y, -Angle )
else
CompCanvas.DrawText( Text, Rect( X, Y, X + W, Y + H ), -Angle );
finally
CompCanvas.Free();
end;
end;