Nur um es mal zu erklären:
Bei Strings kann Delphi, anhand der im "String" versteckten Encoding-Informationen auch unterschiedliche Strings vergleichen.
Bei Char (WideChar) und AnsiChar geht das untereinander leider nicht so gut, weswegen Delphi hier eine "Warnung" anzeigt.
Wobei die Fehlermeldung hier ja eigentlich "'char' zu 'ansichar'" heißen müßte, da aber der Compiler vermutlich versuchte das Problem aufzulösen, ist er erst bei "'string' zu 'ShortString'" gescheitert.
Rechts das OR ist ein Binäres und aus
if cParam <> '-' or '/' then
wird ein
if cParam <> ('-' or '/') then
, bzw.
if cParam <> Chr(Ord('-') or Ord('/')) then
.
Hier wird also zuerst das OR aufgelöst, wobei Delphi hierbei die Chars als erstmal AnsiChar interpretiert. Den Char-Konstante direkt mit dem WideChar (cParam) verbinden, kann der Compier das erkennen und die Konstante ebenfalls als WideChar verwenden.
Delphi-Quellcode:
if cParam <> AnsiChar(Ord('-') or Ord('/')) then
if cParam <> AnsiChar($2D or $2F) then
if cParam <> AnsiChar($2F) then
if cParam <> '/' then
Besseres Beispiel (OK, abgesehn davon, daß das Zeichen 127 nicht so schön darstellbar ist)
Delphi-Quellcode:
if cParam <> ('-' or '[') then // $2D or $5B = $7F
if cParam <> Chr(127) then // $7F
Und hier knallt es natürlich:
Delphi-Quellcode:
var cParam: string;
if cParam <> 'abc' or '123' then
(Char ist ein ordinaler Typ, bei dem man mathematische und binäre Operationen anwenden kann, was beim String nicht geht)