AFsoft WebSite(エーエフソフト・ウェブサイト)
 

オペレーティング・システムについて

プログラミングについて
ホームページについて
キャドについて
電子カタログについて
書籍・雑誌
イベント
リンク集
DelphiXE3 [FMX] 文字描画 2014/06/02
 
前回は、画像描画(DrawBitmap)について記述しました。今回は、文字描画(FillText)について見ていきます。Fill〜なので「文字塗り潰し」(文字形状の内部を塗り潰すという意?)というべきかもしれませんが若干の語弊があるやもしれませんので単純に「文字描画」としておきます。
 
以下、ヘルプより
TCanvas.
FillText
procedure FillText(const ARect: TRectF;
 const AText: string; const WordWrap: Boolean;
 const AOpacity: Single; const Flags: TFillTextFlags;
 const ATextAlign: TTextAlign;
 const AVTextAlign: TTextAlign = TTextAlign.taCenter);
テキスト文字列を、現在の TCanvas の指定された四角形領域上に表示します。
 
FillText は、テキスト文字列を指定された配置、Fill および Font プロパティで指定された現在のフォントおよびブラシで表示するよう、TCanvas の子孫で実装します。テキストは、現在の TCanvas の指定された四角形領域上に表示されます。
 
ARect パラメータは、テキストが表示される四角形領域を示します。
 
AText パラメータは、表示するテキストを示します。
 
WordWrap パラメータは、単語の折り返しオプションを示します。True の場合は、レイアウト ボックスからテキストをはみ出させないよう、行間で単語を折り返し複数行に渡ります。False の場合は、レイアウト ボックスからテキストがはみ出しても、一行内にテキストを収めます。
 
AOpacity パラメータは、Fill 色の透明度を示します。
 
Flags パラメータは、AText の読む方向を示します。
 
ATextAlign は、ARect 内のテキストの、水平方向の揃え位置です。
 
AVTextAlign は、ARect 内のテキストの、垂直方向の揃え位置です。AVTextAlign は任意です。 デフォルトでは、taCenter に設定されています。
 
[Shapes]内のペイントボックス(PaintBox)を配置し、ClipChildernプロパティを True にしておきます。uses節に「UIConsts」を追記します。

OnPaintイベントハンドラを下記のようにしてみます。
procedure TForm1.PaintBox1Paint(Sender: TObject; Canvas: TCanvas);
begin
 with Canvas do begin
  Clear(claWhite);
  Fill.Kind := TBrushKind.bkSolid ;
  Fill.Color := claBlue ;
  FillText(RectF(0,0,150,150),'これはテストです',False,1.0,
   [], TTextAlign.taCenter);
 end;
end;
保存・ビルド(コンパイル)・実行をすると下図のようになります。

 
第1引数 ARect は、文字をキャンバスのどの部分に描画するのかを指定します。恒例の四角形領域で指定します。文字の大きさは フォントファミリー(フォント名)や Font.Size 等で決まります。この四角形領域一杯にフィット表示させる、という意味ではありません。
 
表示する前に、どれくらいの幅・高さになるのかを知る手段はあります。
TextWidthメソッドで、文字の幅を取得する事が出来ます。
TextHeightメソッドで、文字の高さを取得する事が出来ます。
TCanvas.
TextWidth
function TextWidth(const AText: string): Single;
現在の フォント でレンダリングされるテキストの幅を、ピクセルで返します。
 
TextWidth を使用すると、TCanvas 上で、テキストを表示するために必要な水平スペースの大きさを、判別することができます。 返される TextWidth には、TCanvas 上にて、テキストの前後に通常入る空間が含まれています。 TCanvas における他の要素(線、ボックス、またはテキストの追加行など)については、テキストの幅に応じて配置されます。
TCanvas.
TextHeight
function TextHeight(const AText: string): Single;
現在の Font でレンダリングされるテキストの高さを、ピクセルで返します。
 
TextHeight を使用すると、TCanvas 上で、テキストを表示するために必要な垂直スペースの大きさを、判別することができます。戻り値には、TCanvas 上にて、テキストの上下に通常入る空間が含まれています。 TCanvas における他の要素(線、ボックス、またはテキストの追加行など)については、テキストの高さに応じて配置されます。
TCanvas.
MeasureText
procedure MeasureText(var ARect: TRectF;
 const AText: string; const WordWrap: Boolean;
 const Flags: TFillTextFlags;
 const ATextAlign: TTextAlign;
 const AVTextAlign: TTextAlign=TTextAlign.taCenter);
指定された揃え位置、フラグ、現在のフォントで表示される、テキスト文字列が TCanvas 上で占める領域を測ります。
 
指定された改行方式、揃え位置、フラグ、現在のフォントで表示される、テキスト文字列が占める四角形領域を判別するには、MeasureText を TCanvas の子孫で実装する必要があります。テキスト文字列は、四角形フレーム内に収まります。
 
ARect パラメータは、テキストの入った境界線付きの四角形を示します。 ARect は、返される変数です。ARect が初期化されていない場合、返される四角形は (0,0) でセンタリングされます。
 
AText パラメータは、計測するテキストを示します。
 
WordWrap パラメータは、単語の折り返しオプションを示します。 True の場合は、レイアウト ボックスからテキストをはみ出させないよう、行間で単語を折り返し複数行に渡ります。 False の場合は、レイアウト ボックスからテキストがはみ出しても、一行内にテキストを収めます。
 
Flags パラメータは、AText の読む方向を示します。
 
ATextAlign は、ARect 内のテキストの、水平方向の揃え位置です。
 
AVTextAlign は、ARect 内のテキストの、垂直方向の揃え位置です。 AVTextAlign は任意です。 デフォルトでは、taCenter に設定されています。
例えば、
with Canvas do begin
 Clear(claWhite);
 Fill.Kind := TBrushKind.bkSolid ;
 Fill.Color := claBlue ;
 s := 'これはテストです' ;
 w := TextWidth(s);
 h := TextHeight(s);
 FillRect(RectF(0,0,w,h),0,0,AllCorners,0.1);
 FillText(RectF(0,0,w,h),s,False,1.0,[],TTextAlign.taCenter);
end;
とすれば、下図のようにピッチリ入る四角形を描画する事は可能です。

 
 
第2引数 AText は、描画したい文字内容を指定します。
ごくごく普通に、DelphiXE3 は string型は、Unicode文字列の型なので、Unicode文字をそのまんま記述すれば良いです。
 
 
第3引数 WordWrap は、描画しようとしている文字が 指定した四角形領域の幅を超えた場合、超えた部分を無視してカットするか(ワードラップしない:False 指定)、次の行に折り返して描画するか(ワードラップする:True 指定)を指定します。例えば、
with Canvas do begin
 Clear(claWhite);
 Fill.Kind := TBrushKind.bkSolid ;
 Fill.Color := claBlue ;
 FillText(RectF(0,0,150,150),
  'これはテストです。This is a Test Program.',False,1.0,
  [], TTextAlign.taCenter);
end;
とすると下図のようになります。

FillText(RectF(0,0,150,150),
 'これはテストです。This is a Test Program.',True,1.0,
 [], TTextAlign.taCenter);
とすると下図のようになります。

 
 
第4引数 AOpacity 、透過率を指定する事が出来ます。
0.0(完全透明)〜1.0(完全不透明)の範囲内で指定します。
with Canvas do begin
 Clear(claWhite);
 Fill.Kind := TBrushKind.bkSolid ;
 Fill.Color := claRed ;
 FillRect(RectF(50,50,100,100),0,0,AllCorners,0.5);
 Fill.Color := claBlue ;
 Font.Size := 32 ;
 Font.Style := [TFontStyle.fsBold] ;
 FillText(RectF(0,0,150,150),'テスト',False,0.5,
  [], TTextAlign.taCenter);
end;
とした場合は、下図のようになります。

文字全体は薄くなりますが、別の図形と重なった部分の色が、重なっていない部分の色とは違っている、という事が分かると思います。
 
 
第5引数 Flags ですが、
TFillTextFlags型となっていて、これをヘルプで見ると
type TFillTextFlags = set of TFillTextFlag;
となっていて、
TFillTextFlag = (ftRightToLeft);
となっています。
 
つまり、文章を右から左へ読む言語を使っている場合には、
FillText(RectF(0,0,150,150),'〜〜〜〜〜',False,1.0,
 [TFillTextFlag.ftRightToLeft], TTextAlign.taCenter);
という指定をします、という事で、
通常の日本語文章や英文の場合には、
FillText(RectF(0,0,150,150),'〜〜〜〜〜',False,1.0,
 [], TTextAlign.taCenter);
のように記述しないようにすれば良いようです。
 
 
第5引数 ATextAlign は水平位置揃えを
第6引数 AVTextAlign は垂直位置揃えを指定します。第6引数は省略する事が出来ます(省略時は、taCenter:中央)。
TTextAlign.taCenter テキストは親の領域の中央に移動します。
TTextAlign.taLeading テキストは親の領域の先頭に移動します。
TTextAlign.taTrailing テキストは親の領域の末尾に移動します。
 
 
文字は、Fillブラシの状態で描画します。
また、
Fontプロパティにて、フォントファミリー(フォント名)・フォントサイズ・フォントスタイルを指定する事が出来ます。
FMX.Types.TFont.Family
フォントのタイプフェイスを示します。
 
Family を使用すると、フォントのタイプフェイスを指定できます。
Family は、VCL における Vcl.Graphics.TFont.Name と同等です。
FMX.Types.TFont.Size
フォントの高さ(ポイント)。
 
Size を使用すると、テキストのサイズを指定できます。このサイズには、ベースラインと、そのベースラインから文字の上までのアセント、文字の下までのディセントが含まれます。
 
フォント サイズは、ポイント(1インチあたり 72)で表現されます。OS X では、ディスプレイのデフォルトが 72 DPI(1 インチあたり 72 ドット(またはピクセル))であるため、ポイント値はピクセルと同じです。ウィンドウのテキスト(DirectWrite API レベルでの)は、デバイス非依存ピクセル(DIP)のサイズで、1インチあたり 96 です。また、ディスプレイのデフォルトもまた、96 DPI です。このため両ケースとも、フォント サイズ単位とディスプレイ解像度の間に、1 対 1 の関係が成り立ちます。テキストは、Windows と OS X の両方で、同じ高さとなります。(各プラットフォーム上でのフォントのレンダリングの仕方によって、若干の相違は見られます)。
 
たとえば、フォントのサイズが 24 としましょう。 Windows 上では、24 DIP は、24/96 または 1/4 インチの高さになります。 96 DPI の画面上での 1/4 インチは、24 ピクセルです。OS X 上では、24 ポイントは、24/72 または 1/3 インチの高さになります。72 DPI の画面上での 1/3 インチは、24 ピクセルです。
 
Windows 上でのポイント指定のテキスト サイズは、同じ数値のものより大きく表示されます。たとえば、96 DPI での 24 ポイントは、32 ピクセルの高さになります。
FMX.Types.TFont.Style
フォントが標準、斜体、下線付きかどうかを指定します。
 
Style を使用すると、そのフォントを使用する文字に、特殊な特性を追加することができます。 Style は 0 個以上の以下の値の組み合わせからなります:
意味
TFontStyle.fsBoldフォントは太字です。
TFontStyle.fsItalicフォントは斜体です。
TFontStyle.fsUnderlineフォントは下線付きです。
TFontStyle.fsStrikeOutフォントがそれを通る水平線と共に表示されます。
 
例えば
with Canvas do begin
 Clear(claWhite);
 Fill.Kind := TBrushKind.bkSolid ;
 Fill.Color := claBlue ;
 Font.Family := 'MS 明朝';
 Font.Size := 32;
 Font.Style := [TFontStyle.fsItalic,TFontStyle.fsStrikeOut] ;
 FillText(RectF(0,0,150,150),'テストです',False,1.0,
  [], TTextAlign.taCenter);
end;
とした場合は、下図のようになります。

 
 
バッチファイル
BASIC
C言語のお勉強
拡張子な話
DOSプログラム
Delphi
>Dehi入門編
>Delphi2010
>DelphiXE3
▲2014/06/01
 2014/06/02
▼2014/06/03
 
シェアウェア
Script!World
データベース
 
お問い合わせ 
本サイトはリンクフリーです
リンクバナー
(C)Copyright 1999-2015. By AFsoft All Rights Reserved.