全力わはー RSSフィード

2017-03-23

Delphi 10.2 Tokyoのdocwikiに書かれてなさそうな変更点。

00:31 | Delphi 10.2 Tokyoのdocwikiに書かれてなさそうな変更点。を含むブックマーク

ざっくりと見ただけなので全体を網羅できてないですし、10.1以前での変更点も含むかもしれない程度に適当ですのであらかじめご了承下さい。

System.SysUtils

IntToHexのoverloadが増えた

具体的にこんなのが増えてます。それぞれ引数の型サイズ×2の桁数で表示されるようです。

function IntToHex(Value: Int8): string; overload; inline;
function IntToHex(Value: UInt8): string; overload; inline;
function IntToHex(Value: Int16): string; overload; inline;
function IntToHex(Value: UInt16): string; overload; inline;
function IntToHex(Value: Int32): string; overload; inline;
function IntToHex(Value: UInt32): string; overload; inline;
function IntToHex(Value: Int64): string; overload; inline;
function IntToHex(Value: UInt64): string; overload; inline;
文字列を32bit符号なし整数に変換できるようになった

以下の3つの関数が追加されてます。今までStrToIntはあったんですが、符号付きの範囲しか変換できなかったため、$80000000以上$FFFFFFFF以下を変換しようと思うとStrToInt64などを使わざるを得ませんでした。

function StrToUInt(const S: string): Cardinal; overload;
function StrToUIntDef(const S: string; Default: Cardinal): Cardinal; overload;
function TryStrToUInt(const S: string; out Value: Cardinal): Boolean; overload;

System.Classes

TStreamが64bitサイズの読み書きに対応

以前まではReadメソッドやWriteメソッドのCount引数の型がIntegerだったため、どうあがいても一度に読み書きできるのは32bit範囲に限定されていましたが、今回Read64とWrite64というCountの型がInt64になったメソッドが新設されたことでその制限が無くなりました。ただし形無し引数版は無く、対応してるのはTBytesの読み書きだけです。

同時に、TStreamのReadBufferやWriteBuffer、それに関連してTReaderやTWriter、TParserなどの中にあるCount引数を持つメソッドで、Countの型がIntegerからNativeIntになりました。これはoverloadされたメソッドが新設されたわけではなく既存メソッドの仕様変更なので、場合によっては注意する必要がありそうです。

Countの件とは関係ないですが、TStreamにはReadData<T>やWriteData<T>というメソッドも追加されてます。

TMemoryStreamのCapacityの仕様が変更

具体的にはアクセサであるSetCapacityメソッドがprivateからprotectedに移動し、virtual化してます。

またTStreamの64bit対応に合わせてか、Capacityの型もLongintからNativeIntになったので、64bitアプリではより大きなサイズを扱えるようになりました。

System.JSON.ConvertersとSystem.JSON.Serializersユニットが追加

こういうボリューミーな新機能こそdocwikiに書いておいて欲しいですが、なんか追加されたみたいです。

Serializersの方はJsonIgnoreAttributeやJsonNameAttributeみたいなカスタム属性があり、シリアライズする際の挙動を細かく指定できるようでなかなか便利そうです。だからちゃんと説明して下さい>エンバカデロ

Vcl.ExtCtrls

TImage.OnFindGraphicClassイベント

TImage.Pictureに画像を読み込む際、今までは拡張子やクリップボードの内容をVCLが自動で判定して適切なTGraphic派生クラスを使用していましたが、このイベントを使うことでそれを制御できるようになったようです。さらにTPictureにLoadFromStreamが新設され、その読み込み判定にも使用されます。

また、関連してTGraphicにCanLoadFromStreamというクラスメソッドが追加され、これを使うことで事前にロード可能か判定できるようになったようです。ざっと見たところ全てのTGraphic派生クラスで実装されているようなので、気にせず使っても大丈夫そうです。

トラックバック - http://d.hatena.ne.jp/tales/20170323/1490283085