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 30-09-2014
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 17
jafera Va por buen camino
Uso de CharInSet

Hola de nuevo a todos.

Despues de unos dias sin tocar Delphi, he retomado la conversión de un proyecto D6 a DXE7 y al compilar, todo sale correcto pero me envia el warning siguiente:

[dcc32 Warning] Principal.pas(227): W1050 WideChar reduced to byte char in set expressions. Consider using 'CharInSet' function in 'SysUtils' unit.

El codigo es el siguiente:

Código Delphi [-]
if ((Sender as TJvDBGrid).SelectedField.FieldName = 'DIVENDRES') then
        begin
                if(UpCase(Key) in ['N','S']) then      //Esta es la linea 227
                        Key:= UpCase(Key)
                else
                        Key:= #0;
        end;

Entiendo que me propone que cambie una funcion pero no acabo de entenderlo.

Muchas gracias por adelantado.

Josep
Responder Con Cita
  #2  
Antiguo 30-09-2014
Avatar de ElKurgan
[ElKurgan] ElKurgan is offline
Miembro Premium
 
Registrado: nov 2005
Posts: 1.233
Poder: 20
ElKurgan Va camino a la fama
Todo viene a cuenta de la inclusión de Unicode a partir de Delphi 2009. Te aconsejan utilizar la función CharInSet porque funciona con esos tipos de cadenas de forma más eficiente.

Saludos
Responder Con Cita
  #3  
Antiguo 30-09-2014
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 17
jafera Va por buen camino
Gracias por la respuesta, pero sigo sin aclararme.

Debo cambiar el tipo de campo en la tabla?
Debo añadir la fguncion al uses?

Saludos

Josep
Responder Con Cita
  #4  
Antiguo 30-09-2014
engranaje engranaje is offline
Miembro
 
Registrado: may 2011
Posts: 163
Poder: 13
engranaje Va por buen camino
Si no me equivoco lo que te está recomendando es que hagas

Código Delphi [-]
  if CharInSet (UpCase(Key), ['N','S']) then

en lugar de

Código Delphi [-]
  if(UpCase(Key) in ['N','S']) then

CharInSet está en sysutils por lo que si no lo tuvieras en el uses tendrías que añadirla.
Responder Con Cita
  #5  
Antiguo 30-09-2014
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Poder: 21
gatosoft Va camino a la fama
Cita:
Empezado por jafera Ver Mensaje
D6 a DXE7 y al compilar, todo sale correcto
Increible...!! yo he hecho un par de migraciones de éste tipo y nunca fue tan sencillo. D2009 introdujo varios cambios importantes que obligaron a revisar todos los programas, sobre todo en el tema de cadenas... creo que fue a partir de ésta versión que comenzamos a hablar de Unicode, Generics, Anonymous Methods, Records con properties.... Datasnap libre de COM.

Un ejemplo clásico es el de las variables globales de configuración regional (como: ShortDateTime, DecimalSeparator....) que pasaron a convertirse en un objeto que debe instanciarse en cada programa (ya no son variables o registros globales)

También, recuerdo que después de XE3 vinieron cambios que pusieron problemas a algunas migraciones... Funciones que desaparecieron o se reorganziaron en otras librerías, llegaron los Helpers, por ejemplo

Has un doble check a los otros warnings, amigo Josep... por si acaso
Responder Con Cita
  #6  
Antiguo 30-09-2014
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 17
jafera Va por buen camino
Cita:
Empezado por engranaje Ver Mensaje
Si no me equivoco lo que te está recomendando es que hagas

Código Delphi [-] if CharInSet (UpCase(Key), ['N','S']) then
No le gusta, dice que CharInSet no se puede usar con estos argumentos, he probado a ponerlo todo entre parentesis y tampoco.

Gracias

Josep
Responder Con Cita
  #7  
Antiguo 30-09-2014
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Poder: 21
gatosoft Va camino a la fama
http://docwiki.embarcadero.com/Libra...tils.CharInSet

Revisa hacer un Type Cast con AnsiChar

Código Delphi [-]
if CharInSet (AnsiChar(UpCase(Key)), ['N','S']) then

No tengo delphi ahora para poderte confirmar, pero revisa tambien la opcion de AnsiUpperCase en lugar de UpCase

Código Delphi [-]
if CharInSet (AnsiUpperCase (Key), ['N','S']) then

El tema es que todas las funciones que recibian parametros String o Char cambiaron para WideString, AnisChar, AnsiString...

saludo,
Responder Con Cita
  #8  
Antiguo 30-09-2014
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 17
jafera Va por buen camino
Cita:
Empezado por gatosoft Ver Mensaje
http://docwiki.embarcadero.com/Libra...tils.CharInSet

Revisa hacer un Type Cast con AnsiChar

Código Delphi [-]if CharInSet (AnsiChar(UpCase(Key)), ['N','S']) then
Muchas gracias.

Esta opcion es la que ha funcionado perfectamente, ya no da el "warning" al compilar

Saludos

Josep
Responder Con Cita
  #9  
Antiguo 30-09-2014
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 17
jafera Va por buen camino
Y este otro warning

Código Delphi [-]
[dcc32 Warning] Arbitres.pas(942): W1057 Implicit string cast from 'AnsiString' to 'string'

Es algo parecido?

Saludos

Josep
Responder Con Cita
  #10  
Antiguo 30-09-2014
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Poder: 21
gatosoft Va camino a la fama
Es solo un warning para que analices y optimices tu código, en el cual te indica que en esa linea de código el compilador hace un tratamiento de AnsiString a una cadena que defines como string (o viceversa).

Al igual que el warning que da origen a este hilo.. que te sugiere que consideres modificar tu código para que no hayan problemas de compatibilidad en ciertos casos.

En lo personal, siempre intento atender los warnings, pero no son obligatorios
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 19:33:23.


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