午後わてんのブログ

ベランダ菜園とWindows用アプリ作成(WPFとC#)

Pixtack紫陽花2.7.71.153_複数行の描画、ズレの修正、文字の描画試験中

前回は昨日
 
 
文字の描画で試験中
複数行文字列の描画をできるようにした
縦書の場合のズレを無くした
日本語だけの時と英数字も在るときのズレの修正を選択できるようにした
英数字だけの時にずれないようにした
文字の描画の背景色のグラデーションの角度指定を向きから数値に変更、昨日の文字と同じ
 
レイアウトの変化

f:id:gogowaten:20191017135130p:plain

赤枠が今回の変更箇所
 

f:id:gogowaten:20191017135142p:plain

文字の背景色の有無を指定するチェックボックスの名前を
「透明」→「背景」に変更、
場所も「背景の書式」から「文字の書式」に移動
 

f:id:gogowaten:20191017135153p:plain

背景色のグラデーションの角度指定を向きから数値にした
 
 

以下は試験中でデバッグ用ボタンなので
文字の描画ボタンを押したときは今までと変わらない
 
イメージ 2
縦書で複数行の描画、前回と今回の比較
 
 
イメージ 5
横書きの時の描画の上下の位置の調整
前回は上下の空きスペースの判定にアルファベット小文字と日本語文字を含む
「jykl文字」だけを使っていた
これだと日本をだけの描画の時に下側の空きスペースが大きくなってしまうのは
画像の重ねて比較でわかる
これはアルファベットの下に突き出る文字のjyを考慮していたから
逆に英数字だけの時にフォントによっては
こうなっていた↓
イメージ 6
下側が枠の外側になっている
描画されている文字はalphabet_jyg
 
なので描画しようとしている文字列が英数字だけなのか日本語だけなのか
またはその両方混じっているかの判定をして
英数字だけのときは「jygfkl」
日本語だけのときは「文字」
両方ある時は「jygfkl文字」(前回と同じ)
判定用の文字列を変えるようにした
結果
 

なお複数行の場合の判定用文字列は「jygfkl文字」で固定
文字列の描画範囲を求める
Graphics.MeasureStringで返ってくるサイズのHeightは
2行なら1行の時の2倍、5行なら1行の時の5倍ではない!
2行なら1行の時のHeight+Font.Heightになる
5行なら1行の時のHeight+(Font.Height*5)になる
そんなこんなで複数行の場合は「jygfkl文字」で判定して問題なさそう
 
日本語とアルファベット小文字の両方の文字列の場合は
日本語に合わせるか、両方を考慮するかの選択ができるようにしたのが
イメージ 8
 
ここまではデバック用ボタンを押した時だけに適用される物
デバック用ボタンで描画できるのは文字と背景色くらいで
縁取りとか背景のかたちとかその他の設定は無視される
逆に今までの文字描画ボタンで無視されるのは位置調整、複数行の文字列とか
 
ダウンロード
ヤフーボックス
 
 
翌日