Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Ordenar letras en un Canvas (https://www.clubdelphi.com/foros/showthread.php?t=94512)

compuin 12-03-2020 14:58:18

Ordenar letras en un Canvas
 
Buenos dias a todos,

Alguien sabe como ordenar un conjunto de x cantidad de letras en forma consecutiva dentro de un canvas dadas unas coordenadas x, y ?

Gracias

ecfisa 12-03-2020 15:15:22

Hola.
  • ¿ Donde se encuentra ese conjunto de letras ?
  • ¿ Que tipo de órden deseas aplicarle ?

Saludos :)

compuin 12-03-2020 15:22:06

Estan en una TImage

El orden deberia ser secuencial, es decir, evitar que una letra se sobreponga sobre otra cuando se ordenen

ecfisa 12-03-2020 16:43:49

Hola.
Cita:

Empezado por compuin (Mensaje 536246)
Estan en una TImage

Entiendo con eso que las letras estan en modo gráfico, como imágen. De ser así, la mayor dificultad es conseguir los caracteres; habría que usar algún software OCR para interpretarlos y así obtener cada uno de ellos.
Una vez adquiridos, los puedes mostrar mediante el procedimiento TextOut por ejemplo.

Saludos :)

compuin 12-03-2020 16:45:19

Si, asi lo hago

Con textout

Los caracteres se pueden convertir mediante una fuente de Windows

El asunto es que no haya overlapping entre ellos y por eso se deban ordenar secuencialmente

ecfisa 12-03-2020 18:18:45

Hola.

Es que no termino de entender la situación...

Si ya obtuviste los caracteres, puedes almacenarlos en un string y mostrarlos con Canvas.TextOut, de ese modo no deberías tener ningún tipo de superposición.

Y, si deseas manejar los interespacios entre caracteres de modo mas fino, puedes usar la función API SetTextCharacterExtra.

Saludos :)

compuin 12-03-2020 18:21:26

Asi lo hago

Código Delphi [-]
      TextOut(Offset + round(-x * (RadiusOuter - l - lplus * occupied[deg]))+ RadiusOuter - space.cx div 2,
        Offset + round( y * (RadiusOuter - l - lplus * occupied[deg]) + RadiusOuter - space.cy div 2), what);

Pero no veo como hacer para que no ocurra el overlap

escafandra 12-03-2020 18:25:52

Vamos a ver. Ordenar lo ordenas a medida que las escribes en el canvas, eso no es un problema. La superposición la resuelves conociendo de antemano el tamaño del carácter o caracteres que vas a escribir. Revisa la API GetTextExtentPoint32A o GetTextExtentPoint32W para Unicode.


Saludos.

compuin 12-03-2020 18:28:14

Ok, entiendo lo que me planteas

Pero basicamente el overlap va a ocurrir cuando 2 letras tengas las mismas coordenadas (x,y) y ncecesito que cuando esto pase se separen los 2 aunque tengan las mismas coordenadas

escafandra 12-03-2020 19:11:49

Cita:

Empezado por compuin (Mensaje 536254)
Ok, entiendo lo que me planteas

Pero basicamente el overlap va a ocurrir cuando 2 letras tengas las mismas coordenadas (x,y) y ncecesito que cuando esto pase se separen los 2 aunque tengan las mismas coordenadas


Imposible. Si dos puntos tienen las mismas coordenadas, coinciden y, además, son el mismo punto. Si quieres separar los caracteres lo tienes que hacer tu por código. Si conoces su tamaño y donde vas a estar, sólo tienen que calcular donde tienes que moverlos.


Saludos.


La franja horaria es GMT +2. Ahora son las 07:54:19.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi