Função Delphi para formatar números de telefone com ou sem DDD e com ou sem nono dígito:
function FormataFone(sTelefone: String): String;
var
s: string;
tam: Integer;
begin
s := FilterChars(sTelefone, ['0'..'9']);
// Retira zero inicial se houver
if Copy(s,1,1) = '0' then
begin
s := Copy(s,2,Length(s)-1);
end;
case Length(s) of
8: // 4455-6677
begin
Result:= Copy(s,1,4)+'-'+Copy(s,5,4);
end;
9: / / 9 8877-6655
begin
Result:= Copy(s,1,1) + ' ' + Copy(s,2,4)+'-'+Copy(s,6,4);
end;
10: // (85) 8877-6655
begin
Result:= '('+Copy(s,1,2)+') '+Copy(s,3,4)+'-'+Copy(s,7,4);
end;
11: // (85) 9 8877-6655
begin
Result:= '('+Copy(s,1,2)+') ' + Copy(s,3,1) + ' ' +Copy(s,4,4)+'-'+Copy(s,8,4);
end;
else
Result:= s;
end;