Cómo conocer la longitud y altura en pixels de un texto

5040 vistas

El siguiente código permite recuperar la longitud y altitud de un pÃxel dentro de un texto.

La función soporta texto multilínea y devuelve la longitud de la línea más larga y la altura total.

El principio es la utilización de las funcionalidades del Canvas de un TBitmap para recuperar las medidas del texto.



delphi
  1. Function TextSize(Frase: string; Control: TFont = nil): TPoint;
  2. var
  3.   DC: HDC;
  4.   X: Integer;
  5.   Rect: TRect;
  6.   C : TBitmap;
  7. begin
  8.   C := TBitmap.create;
  9.   if Control <> nil then C.Canvas.Font := Control;
  10.  
  11.   Rect.Left := 0;
  12.   Rect.Top := 0;
  13.   Rect.Right := 0;
  14.   Rect.Bottom := 0;
  15.   DC := GetDC(0);
  16.   C.Canvas.Handle := DC;
  17.   DrawText(C.Canvas.Handle, PChar(Frase), Length(Frase), Rect, (DT_EXPANDTABS or DT_CALCRECT));
  18.     C.Canvas.Handle := 0;
  19.     ReleaseDC(0, DC);
  20.     Result.X := Rect.Right - Rect.Left;
  21.     Result.Y := Rect.Bottom - Rect.Top;
  22.     C.Free;
  23. end;