Como trabalhar com strings baseadas em 0 de maneira compatível com versões posteriores desde o Delphi XE5?
Eu estou tentando converter meu código Delphi 7 Win32 atual para Delphi XE5 Android com alterações mínimas, para que meu projeto pode ser cross-compilado para Win32 de uma variedade de versões do Delphi e Android da XE5.
A partir da XE5, há mudanças significativas na linguagem voltada para o futuro. Uma dessas alterações é seqüências de caracteres com base zero.
Em versões mais antigas com strings baseadas em 1, o código a seguir estava correto:
function StripColor(aText: string): string;
begin
for I := 1 to Length(aText) do
mas agora isso obviamente não está certo. A solução sugerida é usar:
for I := Low(aText) to High(aText) do
Desta forma, XE5 Win32 lida com strings baseadas em 1 e XE5 Android lida com strings baseadas em 0 corretamente. No entanto, há um problema - as versões anteriores do Delphi (por exemplo, XE2) geram um erro em tal código:
E2198 Low cannot be applied to a long string
E2198 High cannot be applied to a long string
Eu tenho bastante código de manipulação de string. Minha pergunta é - como modificar e manter o código acima para ser compilável em Delphi 7 Win32 e Delphi XE5 Android?
P.S. Eu sei que ainda posso desabilitar ZEROBASEDSTRINGS definir no XE5, mas isso é uma solução indesejada, pois no XE6 esta definição provavelmente terá desaparecido e todas as strings serão forçadas a ser baseadas em 0.