Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   ConvertToUtf32 (https://www.delphipraxis.net/206549-converttoutf32.html)

freimatz 5. Jan 2021 07:43

ConvertToUtf32
 
Hallo,
ich bin am Aufräumen von altem Code und wollte mal Warnungen vermeiden.

Da hatte ich z.B. das:
[dcc32 Warning] ... W1000 Symbol 'IsSurrogate' is deprecated: 'Use TCharHelper'
Ok, ich schreibe statt "IsSurrogate(C)" dann eben C.IsSurrogate

Dann das:
[dcc32 Warning] ... W1000 Symbol 'ConvertToUtf32' is deprecated: 'Use TCharHelper'
Da habe ich "UC := ConvertToUtf32(C, C2);"
Wie schreibt man das dann richtig?
Das einzgste was funktioniert ist das:
UC := C.ConvertToUtf32(C, C2);
Es geht nicht:
UC := TCharHelper.ConvertToUtf32(C, C2);

Er benutzt dann das:
class function ConvertToUtf32(const HighSurrogate, LowSurrogate: Char): UCS4Char; overload; static;

Muss ich um die Methode zu verwenden eine Instanz (C) angeben obwohl die (Self) dann gar nicht verwendet wird? Das ist doch "Bockmist". Oder ist das wirklich so gedacht?

TiGü 5. Jan 2021 08:34

AW: ConvertToUtf32
 
Die ConvertToUtf32-Funktionen sind class functions.
Die kannst du wie folgt anwenden:

Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.Character;

var
  MyChar1, MyChar2: Char;
  MyUCS4Char: UCS4Char;

begin
//    IsSurrogate(MyChar);
    MyChar1.IsSurrogate;
//    MyUCS4Char := ConvertToUtf32(MyChar1, MyChar2);
    MyUCS4Char := Char.ConvertToUtf32(MyChar1, MyChar2);
end.
Siehe auch:
Delphi-Quellcode:
type
  TCharHelper = record helper for Char
  private
    class procedure RaiseCheckStringRangeException(Index, LowIndex, MaxIndex: Integer); static;
  public
    const
      MaxHighSurrogate      = #$DBFF;
      MaxLowSurrogate       = #$DFFF;
      MaxSurrogate          = #$DFFF;
      MinHighSurrogate      = #$D800;
      MinLowSurrogate       = #$DC00;
      MinSurrogate          = #$D800;
    class function MaxCodePoint: Integer; static;
    class function UnicodeDataVersion: string; static;

    class function ConvertFromUtf32(C: UCS4Char): string; static;
    class function ConvertToUtf32(const S: string; Index: Integer): UCS4Char; overload; inline; static;
    class function ConvertToUtf32(const S: string; Index: Integer; out CharLength: Integer): UCS4Char; overload; static;
    class function ConvertToUtf32(const HighSurrogate, LowSurrogate: Char): UCS4Char; overload; static;
...

freimatz 5. Jan 2021 09:18

AW: ConvertToUtf32
 
Wenn ich schreibe "UC := Char.ConvertToUtf32(C, C2);" dann kommt
"[dcc32 Error] ... E2018 Record, object or class type required"

Nachtrag: Ah habs - "Char" war bei mir etwas anderes. Mit WideChar geht es.


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