Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-12-2005
amadis amadis is offline
Miembro
 
Registrado: may 2005
Ubicación: San José, Colón, Entre Ríos, Argentina
Posts: 315
Poder: 19
amadis Va por buen camino
Question 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
Responder Con Cita
  #2  
Antiguo 28-12-2005
Avatar de Bicho
[Bicho] Bicho is offline
Miembro Premium
 
Registrado: jul 2003
Ubicación: Inca - Mallorca
Posts: 1.776
Poder: 22
Bicho Va por buen camino
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
Responder Con Cita
  #3  
Antiguo 29-12-2005
amadis amadis is offline
Miembro
 
Registrado: may 2005
Ubicación: San José, Colón, Entre Ríos, Argentina
Posts: 315
Poder: 19
amadis Va por buen camino
Thumbs up 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
Responder Con Cita
  #4  
Antiguo 30-12-2005
Avatar de Bicho
[Bicho] Bicho is offline
Miembro Premium
 
Registrado: jul 2003
Ubicación: Inca - Mallorca
Posts: 1.776
Poder: 22
Bicho Va por buen camino
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
Responder Con Cita
  #5  
Antiguo 30-12-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
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
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #6  
Antiguo 30-12-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
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','ñ','Ñ'];
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #7  
Antiguo 30-12-2005
Athanatos Athanatos is offline
Miembro
 
Registrado: ago 2005
Posts: 33
Poder: 0
Athanatos Va por buen camino
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...
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 20:52: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
Copyright 1996-2007 Club Delphi