Você está na página 1de 3

Delphi Unicode – entendo os avisos (warning) do compilar sua

aplicação
22 de janeiro de 2010/2 Comentários/em Delphi /por Andreano Lanusse

inShare

A partir do Delphi 2009 foi implementado o suporte a Unicode em todo o Delphi, caso você
não esteja familiarizado com Unicode leia este post. Ao compilar sua aplicação alguns avisos (warning) serão emitidos pelo compilador,
neste post vou esclarecer estas mensagens e o que você deve fazer para que elas não apareçam mais.

O código abaixo até versões do Delphi 2007, compilado em versões igual ou superiores ao Delphi 2009, receberá esta mensagem ao
compilar:

W1050 WideChar reduced to byte char in set expressions. Consider using ‘CharInSet’ function in ‘SysUtils’ unit

1 var

2 Status : Char;

3 begin

5 if Status in [ 'a', 's', 'c'] then

6 begin

7 ...

8 end;

Para evitar este warning, você deverá passar a usar a função CharInSet.

1 var

2 Status : Char;

3 begin

5 if CharInSet(Status, ['a', 's', 'c']) then

6 begin
7 ...

8 end;

O código abaixo irá gerar a mensagem W1057 Implicit string cast from ‘ShortString’ to ‘string’

1 var

2 s : ShortString;

3 u : string;

4 begin

5 u := s;

6 end;

Para eliminar este mensagem basta fazer um cast da varíavel ShortString para String, este código será compatível com versões anteriores ao
Delphi 2009.

1 var

2 s : ShortString;

3 u : string;

4 begin

5 u := String(s);

6 end;

A mesma situação se aplica para variáveis AnsiString gerando a mensagem W1057 Implicit string cast from ‘AnsiString’ to ‘string’

1 var

2 a : AnsitString;

3 u : string;

4 begin

5 u := s;

6 end;

Basta fazer um cast da variável AnsiString para String e a mensagem será eliminada.

1 var

2 a : AnsitString;
3 u : string;

4 begin

5 u := AnsiString(s);

6 end;

A mensagem W1058 Implicit string cast with potential data loss from ‘string’ to ‘AnsiString’ precisa ser analizada com cuidado,
podemos fazer o cast e resolver o problema, mas você precisa saber o que está fazendo.

1 var

2 a : AnsitString;

3 u : string;

4 begin

5 u := s;

6 end;

Se você tem certeza que a variável a contém apenas caracteres Ansi, poderá fazer o cast sem problemas.

1 var

2 a : AnsitString;

3 u : string;

4 begin

5 u := AnsiString(s);

6 end;

Até aqui vimos as mensagens geradas pelo compilador, Unicode vai muito mais além e se você quiser exportar sua aplicação para países
asiáticos por exemplo, terá que suportar Unicode, existem 3 artifos no EDN que eu recomendo a leitura, são eles:

EDN Article: “Delphi in a Unicode World Part I: What is Unicode, Why do you need it, and How do you work with it in Delphi?” by Nick Hodges
EDN Article: “Delphi in a Unicode World Part II: New RTL Features and Classes to Support Unicode” by Nick Hodges
EDN Article: “Delphi in a Unicode World Part III: Unicodifying Your Code” by Nick Hodges