Ir al contenido


Foto

Oriéntenme, por favor. (Ancho de caracter en pixeles)


  • Por favor identifícate para responder
3 respuestas en este tema

#1 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 27 enero 2012 - 05:58

Buena tarde, jóvenes.

Resulta que para efectuar un cálculo, requiero saber el ancho de un caracter (o de varios) de acuerdo a la fuente seleccionada por el usuario en una rejilla (TDbGrid) de datos. El título y el contenido de cada celda de la rejilla utilizan la misma fuente, excepto que el título lleva el efecto de negrilla.

Para cumplimentar mi solicitud de orientación, requiero saber qué espacio me ocupará (en pixeles) un texto dado, usando la medida de la fuente.

Gracias por adelantado.
  • 0

#2 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.092 mensajes
  • LocationMurcia, España

Escrito 28 enero 2012 - 04:22

De memoria te lo cuento: Solo un canvas puede darte esa medida, create un tImage aunque no sea visible, pon su image.canvas.font a lo que desees, y usa la funcion image.canvas.textdimx, el nombre de la funcion es de memoria, podria ser otro... eso te da el largo (o alto, hay otra terminada en Y) de un texto exacto con un font determinado, en pixels, si lo quieres en mm la cosa es mas complicada, se necesitas los ppp del dispositivo y esas cosas, si necesitas ese código dimelo y te lo busco el lunes.
  • 0

#3 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 28 enero 2012 - 06:43

El TCanvas tiene una función que realiza lo que buscas: TextExtent. Ese método te devuelve un TSize con el ancho y alto de un texto sin necesidad de pintarlo previamente. Sólo tienes que usar el canvas sobre el que quieres saber el tamaño de tu texto. Recuerda que el canvas tiene una propiedad Font...

Con la API de Windows puedes llegar a lo mismo: GetTextExtentPoint32.


delphi
  1. // Calcula el tamaño en pixels de un texto
  2. function GetTextExtent(Canvas: TCanvas; Text: String): TSize;
  3. begin
  4.   GetTextExtentPoint32(Canvas.Handle, PCHAR(Text), Length(Text), Result);
  5. end;


Pero si el texto es multilínea te calculará el tamaño de todo el texto en línea por lo que tienes que buscar otra solución. Una solución a este problema la he publicado como truco aquí.


Saludos.
  • 0

#4 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.092 mensajes
  • LocationMurcia, España

Escrito 28 enero 2012 - 11:38

Escafandra tiene mejor memoria que yo, je je, pero era eso, lo juro  :
  • 0




IP.Board spam blocked by CleanTalk.