C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: フォントの高さを取得しようとしたら


(過去ログ 16 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■5847 / inTopicNo.1)  フォントの高さを取得しようとしたら
  
□投稿者/ 倉田 有大 (71回)-(2007/07/24(Tue) 20:09:07)

分類:[雑談] 

ひたすらlogFontのlfHeightで、ぐぐったけど、-12という値やら、ポイントでピクセルじゃないとか、
ぐるぐるぐるぐる、頭が回りぐぐっていたら・・

float i = this.Font.GetHeight();

これで取得できるのね。私の時間かえして・・(爆)

横幅はMeasureStringでよさそうですね。
引用返信 編集キー/
■5848 / inTopicNo.2)  Re[1]: フォントの高さを取得しようとしたら
□投稿者/ とっちゃん (174回)-(2007/07/24(Tue) 21:01:54)
とっちゃん さんの Web サイト
No5847 (倉田 有大 さん) に返信
> ひたすらlogFontのlfHeightで、ぐぐったけど、-12という値やら、ポイントでピクセルじゃないとか、
> ぐるぐるぐるぐる、頭が回りぐぐっていたら・・
>
ポイントは 1/72 DPI相当です。結果は、DPI依存なので、どうなるかは、マシンのみぞ知るというところw

>
> 横幅はMeasureStringでよさそうですね。

精度とフォント(スタイルも含め)次第ですが、本気でやるとこれでは足りません。

手抜きでやるなら、前後に半角スペース程度
それなりの精度なら、先頭文字のA幅を引いて末端文字のC幅をプラスする必要があります(どちらもはみ出す場合のみ)。
きちっとやるなら、全文字のABCで一番左に来るやつ&いちばん右に来るやつで幅を割り出さないとだめです。

もちろん、出力先に合わせた状態でです。

その幅&高さで何をするか次第なので、状況に合わせてケースバイケースで対応してください。

引用返信 編集キー/
■5851 / inTopicNo.3)  Re[2]: フォントの高さを取得しようとしたら
□投稿者/ とっちゃん (175回)-(2007/07/24(Tue) 21:53:57)
とっちゃん さんの Web サイト
No5848 (とっちゃん さん) に返信

> ポイントは 1/72 DPI相当です。
72 DPI相当の間違いですw

引用返信 編集キー/
■5871 / inTopicNo.4)  Re[3]: フォントの高さを取得しようとしたら
□投稿者/ 倉田 有大 (72回)-(2007/07/25(Wed) 10:53:45)
No5851 (とっちゃん さん) に返信
> ■No5848 (とっちゃん さん) に返信
>
>>ポイントは 1/72 DPI相当です。
> 72 DPI相当の間違いですw

お返事有難うございます。
ぐぐってみると、確かに、余白が追加されてしまうんですね^^;

http://msdn.microsoft.com/library/ja/jpdnprogwinvbnet/htm/chapter17.asp?frame=true

こういうページを見つけたんですが、

Dim strfmt As StringFormat = StringFormat.GenericTypographic
strfmt.FormatFlags = strfmt.FormatFlags Or _
StringFormatFlags.MeasureTrailingSpaces

まだ、試してませんが、こうすれば、余白きえてくれるのかな?
引用返信 編集キー/
■5877 / inTopicNo.5)  Re[4]: フォントの高さを取得しようとしたら
□投稿者/ とっちゃん (176回)-(2007/07/25(Wed) 11:50:46)
とっちゃん さんの Web サイト
No5871 (倉田 有大 さん) に返信

> お返事有難うございます。
> ぐぐってみると、確かに、余白が追加されてしまうんですね^^;
>
余白は、上下?左右?
上下は、

> http://msdn.microsoft.com/library/ja/jpdnprogwinvbnet/htm/chapter17.asp?frame=true
>
のページの真ん中くらいに書かれている、アセント、ディセントのあたりがわからんと多分難しいと思う。


> こういうページを見つけたんですが、
>
> Dim strfmt As StringFormat = StringFormat.GenericTypographic
> strfmt.FormatFlags = strfmt.FormatFlags Or _
> StringFormatFlags.MeasureTrailingSpaces
>
> まだ、試してませんが、こうすれば、余白きえてくれるのかな?

文言からすると周りの余白を消してエリア算出とは読めるけど...
やってみないと意図したものと同じかどうかはわからんですね。

正直フォント関係は、GDI の昔から難関を極める世界なので...w
引用返信 編集キー/
■5887 / inTopicNo.6)  Re[5]: フォントの高さを取得しようとしたら
□投稿者/ 倉田 有大 (73回)-(2007/07/25(Wed) 13:06:34)
>>http://msdn.microsoft.com/library/ja/jpdnprogwinvbnet/htm/chapter17.asp?frame=true
>>
> のページの真ん中くらいに書かれている、アセント、ディセントのあたりがわからんと多分難しいと思う。

みました、こういうのがあったんですね>_<

> 文言からすると周りの余白を消してエリア算出とは読めるけど...
> やってみないと意図したものと同じかどうかはわからんですね。
>
> 正直フォント関係は、GDI の昔から難関を極める世界なので...w

難関ですね、こんなに難しいとは・・

最終的にはエディターを作成したいのですが、カラーを換えて、フォントを並べて出力と、カーソル位置の算出をどうするか考えています。
引用返信 編集キー/
■5893 / inTopicNo.7)  Re[6]: フォントの高さを取得しようとしたら
□投稿者/ 倉田 有大 (74回)-(2007/07/25(Wed) 13:47:12)
とりあえずやってみました。
このソースでフォントに色を付けて横に並べることはとりあえずできました。

private void Form1_Paint(object sender, PaintEventArgs e)
{
string text = "abcdefgzzzzzzzzzzz";
test(text, 0, 1, e.Graphics, Brushes.Black);
test(text, 1, 1, e.Graphics, Brushes.Blue);
test(text, 2, 1, e.Graphics, Brushes.Teal);
test(text, 3, 1, e.Graphics, Brushes.YellowGreen);
test(text, 4, 1, e.Graphics, Brushes.Thistle);
test(text, 5, 10, e.Graphics, Brushes.Tomato);
}

public void test(string text, int start, int length, Graphics g, Brush b)
{
StringFormat strfmt = StringFormat.GenericTypographic;
strfmt.FormatFlags = strfmt.FormatFlags |
StringFormatFlags.MeasureTrailingSpaces;
float x;
string s1;
if (start != 0)
{
s1 = text.Substring(0, start);
}
string s2 = text.Substring(start, length);

if (start == 0)
{
x = 0;
}
else
{
x = g.MeasureString(text.Substring(0, start), this.Font, new PointF(0, 0), strfmt).Width;
}

g.DrawString(text.Substring(start, length), this.Font, b, new PointF(x, 0), strfmt);
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -