![]() |
Inkompatible Typen AnsiChar und Char
Hallo,
ich bekomme in folgendem Codeausschnitt an der markierten Stelle die Compilermeldung "Inkompatible Typen AnsiChar und Char"
Delphi-Quellcode:
sNummer[i] sollte doch en AnsiChar verlangen und Chr() liefert auch AnsiChar.procedure GetNextNummer(var sNummer: AnsiString); var xLetter: Byte; i: Integer; s: AnsiString; begin i:=Length(sNummer); while i>0 do begin xLetter:=Ord(sNummer[i]); case xLetter of 57: begin sNummer[i]:=Chr(65); //Keine Meldung break; end; 90:sNummer[i]:=Chr(48); //Keine Meldung else begin sNummer[i]:=Chr(xLetter); // Hier kommt die Meldung break; end; end;// case dec(i); end;// for s:=''; i:=0; while i<Length(sNummer)do begin insert('0',s,1); inc(i); end; end; xLetter ist vom Typ Byte, sollte also auch locker passen. Wenn ich anstatt xLetter zB 230 nehm funktionierts muss also was mit xLetter zu tun haben. Aber wo genau ist das Problem? Ich seh es nicht :( :angel: |
Re: Inkompatible Typen AnsiChar und Char
Verwende statt dem Chr direkt AnsiChar
Chr ist bei dir ja WideChar und da kann es mit dem Byte=AnsiChar-Größe probleme geben. Die Nummern haben ja keine Größenangabe (Byte), weswegen es dort wohl funktioniert. PS: GetNextNummer? Denglich ist immer schön. :stupid:
Delphi-Quellcode:
(Ja, mit Ä funktioniert es in aktuelleren Delphi-Versionen :mrgreen: )
GetNextNumber(var sNumber: AnsiString);
// oder GibNächsteNummer(var sNummer: AnsiString); // oder besser noch MakeNextNumber(var sNumber: AnsiString); CreateNextNumber(var sNumber: AnsiString); Aber warum überhaupt erst hin-und-herkonvertieren?
Delphi-Quellcode:
ich vermute mal bei dir fehlt auch noch ein +1 :wink:
procedure GetNextNumber(var sNumber: AnsiString);
var xLetter: AnsiChar; i: Integer; s: AnsiString; begin i:=Length(sNumber); while i>0 do begin xLetter:=sNumber[i]; case xLetter of #57: begin sNumber[i]:=#65; break; end; #90: sNumber[i]:=#48; else begin sNumber[i]:=xLetter; break; end; end;// case dec(i); end;// for s:=''; i:=0; while i<Length(sNummer)do begin insert('0',s,1); inc(i); end; end;
Delphi-Quellcode:
PS: Passiert auch noch irgendwas mit dem "s"?
procedure GetNextNumber(var sNumber: AnsiString);
var i: Integer; s: AnsiString; begin i:=Length(sNumber); while i>0 do begin case sNumber[i] of '9': begin sNumber[i]:='A'; break; end; 'Z': sNumber[i]:='0'; else begin sNumber[i]:=AnsiChar(Ord(sNumber[i]) + 1); break; end; end;// case dec(i); end;// for s:=''; i:=0; while i<Length(sNumber) do begin insert('0',s,1); inc(i); end; end; |
Re: Inkompatible Typen AnsiChar und Char
Danke himi :) AnsiChar funktioniert perfekt :D
Eine Änderung bei "s" ist bisher nicht vorgesehen, auch wenn es teilweise tatsächlich für 5 gehalten wird. Ich habs dem Chef gesagt, aber wenn er sagt nö heisst das nunmal, dass ichs nicht mache. Und du hattest recht, da fehlte tatsächlich ein +1 :shock: Ich steh auf Denglisch, das bleibt so :P |
Re: Inkompatible Typen AnsiChar und Char
Zitat:
Heißt, daß diese Funktion genau das selbe Ergebnis liefert. :angel:
Delphi-Quellcode:
procedure GetNextNummer(var sNummer: AnsiString);
var i: Integer; begin i:=Length(sNummer); while i>0 do begin case sNummer[i] of 'Z': sNummer[i]:='0'; '9': begin sNummer[i]:='A'; break; end; else begin sNummer[i]:=AnsiChar(Ord(sNumber[i]) + 1); break; end; end;// case dec(i); end;// for end; |
Re: Inkompatible Typen AnsiChar und Char
achso du meinst die Variable s.. hmm.. jetz wo du es sagst versteh ich diese Zeilen auch nicht, die füllen s ja nur mit nullen.. naja aber ich habs nich gemacht, das ist von meinem Vorgänger :D
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz