投稿者 N88-BASIC  (社会人) 投稿日時 2018/4/7 16:16:12
Windows 10(1709)+Visual Basic 2017 にてプログラムを作成しております。

現在、文字列を円弧に沿って表示しようと考えております。実際の対象は特殊なものですがDVDなどの円形のメディアに表示させるような感じです。

Wordのワードアートの文字効果の様にできれば最高なんですが処理イメージが全くわきませんので、文字列を分解して一文字ずつ表示しようと考えています。

文字の表示に関して、まず各文字のサイズと表示位置を算出したいのですが、

各文字のサイズは以前にご教授いただいた、MeasureString を利用しておりますが一文字ずつのサイズがうまく取得できずに以下の方法で取得しました。iAlenB ではかなりサイズが大きくなりましたしたので、苦肉の策で iAlenA (”あ”のサイズ)を算出しました。

        Dim iAiuLen As Integer = g.MeasureString("あいう", fFont, 0, sf).Width
        Dim iAlenA As Integer = iAiuLen - g.MeasureString("いう", fFont, 0, sf).Width
        Dim iAlenB As Integer = g.MeasureString("あ", fFont, 0, sf).Widt

その後、iAlenA を利用して位置をピタゴラスの定理を利用して Y位置を求め表示を行いますが、指定したX位置と実際の文字左辺(ドットのデータ?)が離れているので連続して表示しても間隔が少し空いてしまいます。
そこで、以下の様に文字の表示位置を確認してみました。

        g.DrawString("あ", MyFont, MyBrush, X, Y)
        g.DrawRectangle(MyPen, X, Y, 1, 1)

表示された点と文字の左辺が上手く揃っていません。
カーニング?して表示できないかと考えており、実際の画面に表示される文字のサイズが得られればX位置を調整すればと考えました。

そこで、実際に画面に表示される文字のサイズ(レターフェイス?ボディーフェイス?)を取得する方法があればご教授ください。

以上、よろしくお願いいたします。

PS。
表示の際には StringAlignment.Near を指定してみましたがうまくいきませんでした。