Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi WideChar in Set-Ausdrücken auf ByteChar verkürzt ? (https://www.delphipraxis.net/166617-widechar-set-ausdruecken-auf-bytechar-verkuerzt.html)

nachtstreuner 22. Feb 2012 08:42

WideChar in Set-Ausdrücken auf ByteChar verkürzt ?
 
Hallo Delphi-Gemeinde,

ich habe folgenden Code , um nur bestimmte Zeichen in einem EditFeld(DB) zuzulassen:
Delphi-Quellcode:
Zeile 298 : { Im Feld PLZ dürfen nur Zahlen oder auch ein Leerzeichen eingegeben werden}
Zeile 299 : procedure TfrmKUNDENVERWALTUNG.cxDBEditPLZKeyPress(Sender: TObject;
Zeile 300 :    var Key: Char);
Zeile 301 : begin
Zeile 302 :  if not (Key in ['0'..'9', ' ', char(VK_BACK) ]) then
Zeile 303 :      key := #0;
Zeile 304 : end;
Das ganze funktioniert auch so wie ich es haben will.
Allerdings bekomme ich beim compilieren folgende Warnmeldungen, was muss ich tun um diese Warnmeldungen wegzubekommen ?

[DCC Warnung] Kunden.pas(302): W1050 WideChar in Set-Ausdrücken auf ByteChar verkürzt. Ziehen Sie die Verwendung der Funktion 'CharInSet' aus der Unit 'SysUtils' in Betracht.

DeddyH 22. Feb 2012 08:49

AW: WideChar in Set-Ausdrücken auf ByteChar verkürzt ?
 
Es steht doch in der Meldung: Delphi-Referenz durchsuchenCharInSet verwenden.

nachtstreuner 22. Feb 2012 09:07

AW: WideChar in Set-Ausdrücken auf ByteChar verkürzt ?
 
Hallo DeddyH,

das habe ich auch gelesen. Vielleicht hab ich meine Frage falsch gestellt.

Wie muss ich wo im Code etwas ändern ?

So geht´s nicht !
Delphi-Quellcode:
procedure TfrmKUNDENVERWALTUNG.cxDBEditPLZKeyPress(Sender: TObject;
  var Key: CharInSet);
begin
  if not (Key in ['0'..'9', ' ', charInSet(VK_BACK) ]) then
    key := #0;
end;
[DCC Fehler] Kunden.pas(304): E2250 Es gibt keine überladene Version von 'CharInSet', die man mit diesen Argumenten aufrufen kann

himitsu 22. Feb 2012 09:08

AW: WideChar in Set-Ausdrücken auf ByteChar verkürzt ?
 
Wo? (Ein Blick in die OH sollte das eigentlich erklären)
Na, du mußt dein
Delphi-Quellcode:
Key in ['0'..'9', ' ', charInSet(VK_BACK)]
gegen den Aufruf des Delphi-Referenz durchsuchenCharInSet austauschen. :roll:

Und Eventuell auch
Delphi-Quellcode:
AnsiChar(VK_BACK)
.
Ein Set kann nur maximal 256 Werte aufnehmen, was dann auch erklärt, warum Unicode (65536 Werte) dort nicht reinpaßt.

Wobei Embarcadero das auch beheben könnte, wenn man nicht den langsamen Assemblerbefehl (hat nur eine Byte-Adressierung) verwenden würde. (oder zumindestens nicht, bei größeren Sets)

nachtstreuner 22. Feb 2012 09:40

AW: WideChar in Set-Ausdrücken auf ByteChar verkürzt ?
 
Hallo himitsu,

gemäß Deinem Hinweis und meiner Änderung im Code :

Delphi-Quellcode:
//==============================================================================
//Im Feld PLZ dürfen nur Zahlen od. auch ein Leerzeichen eingegeben werden (11)
//==============================================================================
procedure TfrmKUNDENVERWALTUNG.cxDBEditPLZKeyPress(Sender: TObject;
  var Key: Char);
begin
  if not CharInSet(Key,[ '0'..'9', ' ', AnsiChar(VK_BACK) ]) then
    key := #0;

end;
funktioniert es jetzt einwandfrei. Keine Warnmeldungen beim Compilieren, zur Laufzeit funktioniert auch alles.

Besten Dank an Dich und DeddyH :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:09 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