アーカイブ

2008年 6月 5日 のアーカイブ

.NETのクラスライブラリであるTextRenderer.MeasureText メソッドを検証してみた。
http://wantech.ikuto.com/software/TextRendererTest.exe

MSゴシック9ポイントの場合、半角文字は横幅6、全角文字は横幅12を期待したが、
結果は半角11、全角17で、両方とも期待した数値より5大きい。
ちなみにヌル文字の幅が5ポイントに設定されていた。
MSゴシック10ポイントは、半角14、全角21で、両方とも期待した数字より7大きい。
ヌル文字の幅は7ポイントの設定だ。
これってすなわち、MeasureTextメソッドで出てきた数字は、ヌル文字の幅分引けば使えるって事か。
いや、メイリオ9ポイントではヌル文字が16でダメだった。

.NETアプリを作る際、.NETにない機能を実現しようとするとWin32 APIを使う訳だが、
その回数が多ければ多いほど、.NETアプリは遅くなってしまうらしいので、
なるべく.NETの機能だけで何でもやろうと思うと、.NETはもっともっと進化して貰わなければならない。
テキストエディタを作る場合は、文字の幅をフォントごとに計算できないと折り返しが出来ないので、
そういう機能が.NETに備わってくれないと困る。
それで今回のMeasureTextだが、そのままではやはり使い物にならない数字を返してきた。
でも、ひょっとしたら、いくら引けば使える数字になるのかわかる方法があるかも知れない。
ほかに、キャレットの表示も出来なきゃいけないし、IMEとの通信も出来なきゃいけない。
どっちにしろ、まだ.NETはダメみたい。
.NETがテキストエディタを作るのに十分なほど進化すれば、Microsoft製ソフトも.NET移行するはず。
ワードが作れるのにテキストエディタが作れないはずがないって感じになるまでは、
ピュアな.NETでテキストエディタは作れないと思っていいんじゃなかろうか。
動画プレーヤーもちょっと凝ったことをやろうとするとすぐ.NETじゃ無理になるし、
言語としてはC♯をいじりたいのに、どのプロジェクトも移行出来ないなぁ。

929 letters | 778 views | コメントする

2週間くらい前から、事務所PCの時計が遅れがち。
たぶん、起動してないと遅れない。
朝から夕方まで起動すると、1分以上、2分以内の遅れが生じているようだ。
たかが1~2分じゃ気がつかないが、次の日も累積して遅れていくのでさすがに気がついた。
あたしの左腕には常に電波ソーラー時計があるので、PCの時計なんて見なければいいのだが。

「何もしていないのに」とは言いがたい。
むしろなんでもやってるので、なんで遅れたかはわからん。
最近やったことを思いだしてみて、何かやれば改善するかと試してみても効果なし。

そこで、時刻の自動調整をもっと頻繁にやらせる設定方法を探すことにした。
デフォルトでは週一だが、これを3時間に1回くらいでやらせる方法はないかと。
最初に辿り着いた所はWindows2000でのやり方が書いてあって、XPには応用できなかったが、
もう少し探したらXPでのやり方もすぐにわかった。

http://support.microsoft.com/kb/297227/ja
ポーリングなどという言葉じゃ理解できないが。

Googleに「3時間は何秒?」という日本語の質問で検索してみると、10800秒だそうだ。
便利になった。

レジストリを書き換えて再起動すると、次回の同期は三時間後だって。
これで安心。
でも、一般の人は一週間に一回しか同期しないからこそ、タイムサーバーも動いてられるんであって、
みんなが三時間に設定したら単純に計算して56倍の負荷をかけちゃう事になる。
週一で十分な人は週一のままにしておこう。