Delphi Unicode – entendo os avisos (warning) do compilar sua aplicação
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
var Status : Char; begin if Status in [ 'a', 's', 'c'] then begin ... end;
Para evitar este warning, você deverá passar a usar a função CharInSet.
var Status : Char; begin if CharInSet(Status, ['a', 's', 'c']) then begin ... end;
O código abaixo irá gerar a mensagem W1057 Implicit string cast from ‘ShortString’ to ‘string’
var s : ShortString; u : string; begin u := s; 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.
var s : ShortString; u : string; begin u := String(s); end;
A mesma situação se aplica para variáveis AnsiString gerando a mensagem W1057 Implicit string cast from ‘AnsiString’ to ‘string’
var a : AnsitString; u : string; begin u := s; end;
Basta fazer um cast da variável AnsiString para String e a mensagem será eliminada.
var a : AnsitString; u : string; begin u := AnsiString(s); 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.
var a : AnsitString; u : string; begin u := s; end;
Se você tem certeza que a variável a contém apenas caracteres Ansi, poderá fazer o cast sem problemas.
var a : AnsitString; u : string; begin u := AnsiString(s); 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
Bom dia Andreano, desculpa estar pedindo sua ajuda aqui, mas estou com um problema que pode ser simples, mas não estou conseguindo resolver.
tenho o seguinte trecho de código dando erro.
[code]
modoEdicao:= frmPrincipal.QryLogin.FieldByName(‘ESTADOS_I’).AsAnsiString +
modoEdicao:= frmPrincipal.QryLogin.FieldByName(‘ESTADOS_A’).AsAnsiString +
modoEdicao:= frmPrincipal.QryLogin.FieldByName(‘ESTADOS_E’).AsAnsiString;
Executar:= exibeBotoes;
[/code]
Tenho uma TExecutar = (exibeBotoes);
Uma Variável Global: modoEdicao: String;
e na sequência o trecho de código:
[code]
procedure TfrmCadModelo.SetExecutar(const Value: TExecutar);
begin
FExecutar := Value;
case value of
{Exibe os botões de acordo com o Perfil do Usuário}
exibeBotoes:
begin
if modoEdicao = ‘FFF’ then
begin
btnIncluir.Visible := False;
btnAlterar.Visible := False;
btnExcluir.Visible := False;
btnMarcar.Visible := False;
btnSalvar.Visible := False;
btnCancelar.Visible:= False;
Separador2.Visible := False;
Separador3.Visible := False;
end; // OBS o código não para aqui, ele continua, mas para economizar espaço coloquei só o começo.
[/code]
Pesquisando no Google, cheguei aqui e vi que é sobre a conversão de String para AsAnsiString. Só que não consegui fazer isso. Teria como você me dar uma ajuda?
Desde já onrigado pela antenção.