Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Problema con mayuscula automatica luego de wordDelimiter (https://www.clubdelphi.com/foros/showthread.php?t=28668)

amadis 28-12-2005 12:25:29

Problema con mayuscula automatica luego de wordDelimiter
 
Amigos anteriormente he publicado un Hilo pidiendo como hacer mayusculas automatica luego de un espacio.

Y "jjfgg" publico una forma muy eficaz de hacerlo que es la siguiente

Código Delphi [-]
(dbedit1.Text[ dbedit1.SelStart ] in WordDelimiters) then Key := UpCase(Key);

el tema ahora es que al ingresar por ej un Acento o una Ñ que son caracteres ascii extendidos la letra siguiente la pone en mayúscula.
No pasa eso si en lugar de ingresar la Ñ ingreso ALT+164, lo mismo con los acentos.
Pensaba capturar el key y si es = a 'á' reemplazarlo por chr(160) que seria la á pero me ingresa un espacio en lugar de la à.

¿se les ocurre algo? o con este método no se pueden utilizar acentos ni eÑes.

Gracias a todos

Bicho 28-12-2005 13:01:30

Hola que tal?

He estado revisando en la unit StrUtils que es donde se define la constante WordDelimiters, y efectivamente no contempla los valores que te dan problemas como la ñ y los acentos, yo he hecho un pequeño apaño por si lo quieres probar tu en tu aplicación y luego nos dices.

En la unit StrUtils aparece así:

Código Delphi [-]
const
  WordDelimiters: set of Char = [#0..#255] - ['a'..'z','A'..'Z','1'..'9','0'];
Yo la he modificado y queda como sigue:

Código Delphi [-]
const
  WordDelimiters: set of Char = [#0..#255] - ['a'..'z','A'..'Z','1'..'9','0', 'à'..'ÿ', 'À'..'Ý'];

Saludos

amadis 29-12-2005 23:02:14

funciono!
 
buenisimo!

Me podrias Explicar basicamente que significa lo que le agregaste a la definicion.

Asi algun dia puedo llegar a solucionar un problema similar?

Como sabias que agregando eso funcionaria??

Saludos y feliz año

Bicho 30-12-2005 10:26:23

Un mago nunca revela sus secretos!!! Jeje

No en serio es bien sencillo. Como te conté el post anterior, la constante WordDelimiters, contiene una Array con rangos de valores del tipo 'a'..'z', eso quiere decir que recorrerá todos los valores ascii desde el valor ascii de la 'a'
hasta el de la 'z', para solucionar tu problemas con los acentos y las 'ñ', sólo tuve que coger una tabla ASCII (benditas herramientas GExperts para Delphi)
y coger el rango desde la primera letra con un caracter 'raro' en nuestro caso el acento abierto y la última la y con dieresis, nada más no hay más secretos.
Si tienes alguna duda más

Saludos y Feliz Año Nuevo

Lepe 30-12-2005 10:27:42

No soy Bicho, pero creo que puedo explicarlo ;).

Primero se trata de ver por qué no incluye las "Ñ" así que en el editor de delphi escribimos WordDelimiters, mantenemos la tecla CTRL pulsada mientras hacemos clic sobre la palabra, ésto nos lleva a la declaración de WordDelimiters en el código fuente de delphi.

Claro, vemos que pone:
Código Delphi [-]
const
WordDelimiters: set of Char = [#0..#255] - ['a'..'z','A'..'Z','1'..'9','0'];

¿Y como diablos sabemos si ahí se incluye la Ñ o no??, pues tiramos del programa Mapa de carácteres de Windows (en el menú Accesorios), o bien buscamos un programa en internet, buscando por "Map of character" seguro que encontramos alguno, y ahora vemos qué número ascii corresponde a la Ñ y a los demás carácteres que deseamos añadir, como vemos que son números correlativos ascii, entonces usamos los ".." dos puntos para indicar el nuevo rango:

Código Delphi [-]
const
WordDelimiters: set of Char = [#0..#255] - ['a'..'z','A'..'Z','1'..'9','0', 'à'..'ÿ', 'À'..'Ý'];

Como hay varios saltos, añadimos las mayúsculas y minúsculas, y si hubiera otra letra, pues se le añade. Me explico mejor, suponemos que deseamos añadir solamente la ñ y Ñ, pues al original añadimos:
Código Delphi [-]
const
WordDelimiters: set of Char = [#0..#255] - ['a'..'z','A'..'Z','1'..'9','0','ñ','Ñ'];


Saludos

vtdeleon 30-12-2005 14:37:31

Saludos

Solo por molestar. El rango de 1 a 9 y depues agregar 0 como queee es mejor de 0 a 9 no?:
Código Delphi [-]
const
WordDelimiters: set of Char = [#0..#255] - ['a'..'z','A'..'Z','0'..'9','ñ','Ñ'];

Athanatos 30-12-2005 17:15:35

Una pequeña observacion: modificar el WordDelimiters de esa forma podria ocasionar un eventual bug si esa constante es utilizada en otra parte del codigo que suponga que solo valida por ejemplo los caracteres ascii estandar. Seria mejor definir tu propio set extendido... ;)


La franja horaria es GMT +2. Ahora son las 11:41:16.

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