Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Umstellung D7 -> XE4 (https://www.delphipraxis.net/175887-umstellung-d7-xe4.html)

Thomas Feichtner 26. Jul 2013 06:55

Umstellung D7 -> XE4
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo ich möchte gerne unser Projekt von D7 auf XE4 bringen.
Jedoch scheitere ich schon beim Installieren von einigen Komponenten bzw. von Funktionen die diese beinhalten.


Delphi-Quellcode:
function ScanNumber(Value, FormatChars: String; var I: Integer): Boolean;
begin
   Result := True;
   I := I + 1;
   while (Result = True) and (I <= Length(Value)) do begin
     if Value[I] in ['0'..'9'] then begin
        I := I + 1;
     end else if Value[I] = [ThousandSeparator] then begin
        I := I + 1;
     end else if Pos(Value[I], FormatChars) <> 0 then begin
        I := I + 1;
     end else if Value[I] in [DecimalSeparator] then begin
        Result := ScanDecimal(Value, FormatChars, I);
     end else begin
        Result := False;
     end;
   end;
end;
folgende Meldung bekomme ich:
Anhang 39646

Die Unit SysUtils wäre definiert.

Und warum bekomme ich diese Meldung:
Implizite String-Umwandlung mit potenziellem Datenverlust von...
Welcher Teil ist String und welcher ShortString?


Ich seh derzeit den Wald vor lauter Bäume nicht...

Thomas Feichtner 26. Jul 2013 07:13

AW: Umstellung D7 -> XE4
 
1. Fehler habe ich selbe gefunden
Es muss FormatSettings.ThousandSeparator lauten

RWarnecke 26. Jul 2013 07:22

AW: Umstellung D7 -> XE4
 
Hallo,

beim DecimalSeperator sollte das gleiche Problem sein, wie beim ThousandSeparator. Für die anderen Fehler wäre es hilfreich zu wissen, welche Zeile es ist aus Deinem Codeschnipsel.

Thomas Feichtner 26. Jul 2013 08:20

AW: Umstellung D7 -> XE4
 
Die Warnung
Implizite String-Umwandlung mit potenziellem Datenverlust von ..
bekomme ich in dieser Zeile:

Delphi-Quellcode:
 
end else if Value[I] = [ThousandSeparator] then begin

Bernhard Geyer 26. Jul 2013 08:32

AW: Umstellung D7 -> XE4
 
Zitat:

Zitat von Thomas Feichtner (Beitrag 1222739)
Die Warnung
Implizite String-Umwandlung mit potenziellem Datenverlust von ..
bekomme ich in dieser Zeile:

Delphi-Quellcode:
 
end else if Value[I] = [ThousandSeparator] then begin

Hierzu gibts die neue Hilfsfunktion CharInSet.

Uwe Raabe 26. Jul 2013 09:16

AW: Umstellung D7 -> XE4
 
Zitat:

Zitat von Thomas Feichtner (Beitrag 1222739)
Die Warnung
Implizite String-Umwandlung mit potenziellem Datenverlust von ..
bekomme ich in dieser Zeile:

Delphi-Quellcode:
 
end else if Value[I] = [ThousandSeparator] then begin

Was willst du denn mit den eckigen Klammern erreichen? Das sollt doch eigentlich ein Vergleich zweier Char sein und nicht eines Char mit einem Set, oder?

Thomas Feichtner 26. Jul 2013 09:30

AW: Umstellung D7 -> XE4
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1222748)
Was willst du denn mit den eckigen Klammern erreichen? Das sollt doch eigentlich ein Vergleich zweier Char sein und nicht eines Char mit einem Set, oder?

Hallo Uwe,

da hast du schon recht. Ich habe den Source auch nur übernommen und versuche in auf XE4 zu hieven.
Die eckigen Klammern habe ich schon enfernt.

Aber warum bekomme ich diese Meldung?

EgonHugeist 26. Jul 2013 09:50

AW: Umstellung D7 -> XE4
 
function ScanNumber(Value, FormatChars: String; var I: Integer): Boolean;
begin
Result := True;
I := I + 1;
while (Result = True) and (I <= Length(Value)) do
if CharInSet(Value[I], ['0'..'9']) then
Inc(I)
else if Value[I] = FormatSettings.ThousandSeparator then
Inc(i)
else if (Pos(Value[I], FormatChars) <> 0) then
Inc(i)
else if Value[I] = FormatSettings.DecimalSeparator then
Result := ScanDecimal(Value, FormatChars, I)
else Result := False;
end;

Der schöne Günther 26. Jul 2013 09:56

AW: Umstellung D7 -> XE4
 
Wenn schon XE4, warum dann nicht die coolen intrinsischen Record-Helper?

Statt

Delphi-Quellcode:
if CharInSet(Value[I], ['0'..'9']) then
einfach
Delphi-Quellcode:
if Value[i].isNumber() then
?


Ich liebe die Dinger.

CharInSet hat eine überladene Methode mit AnsiChars als Parameter, wahrscheinlich castet er nach AnsiChar runter weil es die erste Methode ist, die passt?

Uwe Raabe 26. Jul 2013 10:10

AW: Umstellung D7 -> XE4
 
Zitat:

Zitat von Thomas Feichtner (Beitrag 1222750)
Aber warum bekomme ich diese Meldung?

Da ein Set of Char wegen der Beschränkungen für Sets implizit ein Set of AnsiChar ist, wird für das Bilden des Sets aus ThousandSeparator zunächst eine Umwandlung durchgeführt. Danach stellt der Compiler dann fest, daß man ein Char nicht mit einem Set vergleichen kann (Inkompatible Typen).


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:34 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz