2.4 TBrushここではTBrush特有のことに関して解説します。2.4.1 TBrushData のデフォルト値 DefBrushDataDefBrushDataの値を以下に示します(括弧内は対応するプロパティ名です)。
2.4.2 TBrushData から TLogBrush への変換図 2.1-2 TResource(リソース)の構造(再掲) TBrushData から TLogBrush への変換は以下のようになります。
2.4.3 TBrushのプロパティ 間の相互作用TBrush では プロパティ が互いに独立では無く、複雑に相互作用します。以下にどのようになるかを列挙します
これらの相互作用は、ブラシの性質を考慮しています。つまり
以上の処置は余計なリソース(そして余分なGDIオブジェクト)を作らないようにするための処置と思われますが、勝手に プロパティ 値が変わってしまうのは困った仕様です。このような配慮は ブラシを管理する BrushManager 側でもできたはずなので、設計ミスといってよいでしょう。 2.4.4 Bitmap プロパティの使用時の注意事項TBrush の Bitmap プロパティ は TBitmap型ですが、Bitmap プロパティ へビットマップを代入は、コピー(Assign)ではなく、オブジェクトの参照が代入されてしまいます!!。ビットマップを複数のブラシで共有したいためにこのようになっていると思われますが、取り扱いには十分な注意が必要です。TBitmap のオブジェクト参照を持つ TBrush のインスタンスが存在する限り、参照されている TBitmap のインスタンスを削除する危険です。 TBrush はビットマップを自動的に削除しないので、ビットマップの削除は別途行わなくてはなりませんが、論理ブラシの作成がどの時点行われるかよく見極めて、ビットマップの削除タイミングを決める必要があります。 最も安全方法は、ブラシを使い終わったら TBrush の Bitmap プロパティ を nil に設定してからビットマップを破壊することです。 論理ブラシが作られるとTBrush の Bitmap プロパティが指すビットマップは不要になりますので、すでに論理ブラシがTBrush内に作られていると確信が持てるときは早めに ビットマップを削除してしまってもかまいません。例えば Canvas.FillRect はブラシを使いますので、Canvas,Brush.Bitmap の指すビットマップは Canvas.FillRect 実行後は破棄しても大丈夫です。 最後に、Bitmap プロパティ に関してもう一つ注意があります。TBitmap は DDB(Device Dependent Bitmap)又はDIB(Device Independent Bitmap) を保持しますが。TBrush は論理ブラシを作るとき、Bitmapプロパティの指すTBitmap のインスタンスの Bitmapのビットマップ形式を強制的に DDB に変換します。いつのまにかビットマップ形式が変わってしまうので、注意してください。 |