![]() |
Delphi-Version: XE7
IN durch CharInSet ersetzen
Hallo zusammen,
beim Öffnen eines, mit Delphi2007 erstellten Programms, mit Delphi XE7 bekomme ich folgende Meldung angezeigt: [dcc32 Warnung] Unit1.pas(4190): W1050 WideChar in Set-Ausdrücken auf ByteChar verkürzt. Ziehen Sie die Verwendung der Funktion 'CharInSet' aus der Unit 'SysUtils' in Betracht. Die beanstandete Quelltextzeile dazu ist:
Delphi-Quellcode:
Diese Konstruktion stammt übrigens aus dem Easy Delphi Helper.
if not (Key in ['0'..'9', ',', '-', Char(VK_BACK), Char(VK_DELETE)]) then Key:= #0;
Nun habe ich das nach CharInSet() umgeformt, aber der Quelltext erstreckt sich jetzt über mehrere Zeilen:
Delphi-Quellcode:
Hat jemand eine Idee, wie es noch kürzer geht (Ja, ich weiß, das alles passt auch in eine Zeile), eventuell mit anderen Methoden?
if not CharInSet(Key,['0'..'9']) then
if not CharInSet(Key,[',']) then if not CharInSet(Key,['-']) then if not CharInSet(Key,[Char(VK_BACK)]) then if not CharInSet(Key,[Char(VK_DELETE)]) then Key:= #0; Vielen Dank das Ihr Euch diesen Thread angeschaut habt. Grüße Franz |
AW: IN durch CharInSet ersetzen
Das Set beginnt bei [ und endet bei ] :wink:
Delphi-Quellcode:
if not CharInSet(Key,['0'..'9', ',', '-', Char(VK_BACK), Char(VK_DELETE)]) then
|
AW: IN durch CharInSet ersetzen
Hallo Jens,
vielen Dank für die blitzschnelle Antwort. Hat geklappt. Grüße Franz |
AW: IN durch CharInSet ersetzen
Man könnte auch einfach die Compilermeldung deaktivieren.
CharInSet macht intern auch nichts anderes, als ein IN. Und außerdem ist CharInSet auch schonwieder veraltet, aber dessen bei Ersatz macht Emba wohl einen Scherz. |
AW: IN durch CharInSet ersetzen
Zitat:
Ich erinnere mich noch mit Freude an TCharacter. Um unseren D2007-Prä-Unicode-Quelltext auf XE2 zu bringen, haben wir unter anderem
Delphi-Quellcode:
durch
c in ['0'..9'']
Delphi-Quellcode:
ersetzt, die neue, korrekte, frisch eingeführte Methode. Soweit OK. Dann steigen wir auf XE6 um und es hagelt "TCharacter is deprecated"-Meldungen. TCharacter wurde (vermutlich) 2009 eingeführt und 2014 (oder eher - bin zu faul zum nachschauen) ist es veraltet? :wall:
TCharacter.IsDigit(c)
|
AW: IN durch CharInSet ersetzen
Die Meldung kommt schon seit einer ganzen Weile.
Delphi-Quellcode:
function CharInSet(C: Char; const CharSet: TSysCharSet): Boolean; overload; inline; deprecated 'Use TCharHelper functionality';
Nur für eigene Bereichsdefinitionen ist TCharHelper absolut sowas von garnicht geeignet. XE6 weiß ich jetzt nicht, das war jetzt wieder aus XE8 kopiert. Ja, bei soeinem Mist, weiß man doch garnicht was man tun soll. |
AW: IN durch CharInSet ersetzen
Zitat:
Dann bleibt der Anwendungscode immer gleich und trotzdem wird das verwendet, was nun gerade State of the Art ist. |
AW: IN durch CharInSet ersetzen
Zitat:
Delphi-Quellcode:
Bei genauem Hinsehen wird man entdecken, daß CharInSet lediglich für den NextGen-Compiler als deprecated markiert ist.
{$IFNDEF NEXTGEN}
function CharInSet(C: AnsiChar; const CharSet: TSysCharSet): Boolean; overload; inline; function CharInSet(C: WideChar; const CharSet: TSysCharSet): Boolean; overload; inline; {$ELSE} function CharInSet(C: Byte; const CharSet: TSysCharSet): Boolean; overload; inline; deprecated 'Use TCharHelper functionality'; function CharInSet(C: Char; const CharSet: TSysCharSet): Boolean; overload; inline; deprecated 'Use TCharHelper functionality'; {$ENDIF} |
AW: IN durch CharInSet ersetzen
Ifndef ?
|
AW: IN durch CharInSet ersetzen
Zitat:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:51 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 by Thomas Breitkreuz