Posts

Showing posts from August, 2009

WPF のステータスバーに表示したテキストをフェードアウトさせる

ステータスバーにメッセージを表示し、一定時間経ったら消す、という処理を実装する際、今回はただ消すだけではなくてフェードアウトしていくような消し方を考えてみた。まずはステータスバーの配置とアニメーションの定義。メッセージを5秒間普通に表示した後、1秒間でフェードアウトして消えるようにしている。<StatusBar>
<StatusBarItem>
<TextBlock Name="textBlock">
<TextBlock.Resources>
<Storyboard x:Key="fadeStoryboard">
<DoubleAnimationUsingKeyFrames Storyboard.TargetName="textBlock" Storyboard.TargetProperty="Opacity">
<SplineDoubleKeyFrame KeyTime="00:00:00" Value="1"/>
<SplineDoubleKeyFrame KeyTime="00:00:05" Value="1"/>
<SplineDoubleKeyFrame KeyTime="00:00:06" Value="0"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</TextBlock.Resources>
</TextBlock>
</StatusBarItem>
</StatusBar&…

WPF の RichTextBox に文字列を設定する&取り出す

WPF の RichTextBox は内部に FlowDocument オブジェクトを持っていて、一部分の文字のスタイルを変えたり、表や画像を表示したりといった高度な文章表現ができるが、普通の TextBox と違って Text プロパティを持っていないので、直接文字列を読み書きすることができない。少々面倒だが、FlowDocument からテキスト領域を取り出して、そこに対して文字列を読み書きする、という風に実装しなければならない。文字列の取得、設定でキーになるのが TextRange クラス。XAML で<RichTextBox Name="richTextBox"/>

のように RichTextBox を宣言していたとすると、文字列の設定は

FlowDocument document = this.richTextBox.Document;
TextRange range = new TextRange(document.ContentStart, document.ContentEnd);
range.Text = "ABCDEFG";

となる。設定する文字列がテキストファイルから読み込んだ文字列で、途中に改行が入っている場合は、1行1パラグラフになる。逆に文字列の取得は

FlowDocument document = this.richTextBox.Document;
TextRange range = new TextRange(document.ContentStart, document.ContentEnd);
string text = range.Text;

WebBrowser コントロールの文字化け解消

.NET 3.5 SP1 で WPF に追加された、WPF の画面に Web ブラウザを埋め込んで Web ページを表示させることのできる WebBrowser コントロール。URL や ファイルのパスを指定して Web ページを表示させることができる以外にも、NavigateToString(“<p>Contents</p>”) のように NavigateToString メソッドを使って String として保持している HTML を直接レンダリングさせることもできる。だが、WebBrowser コントロールを使ってみたところ、日本語が文字化けしてしまった。プロパティやメソッドでエンコーディングを指定する方法はないようだが、このページに回避方法が書かれていた。要は .NET からではなく、META タグで HTML 自体にエンコーディングを指定すればよいらしい。<html>
<head>
<meta http-equiv='Content-Type' content='text/html;charset=UTF-8'>
</head>
<body>

</body>
</html>

TechEd2009 参加(3日目)

参加セッション◆ T6-302 マイクロソフトにおけるアジリティを向上させる開発プロセスへの試みマイクロソフト社内の開発プロセスとか TFS をどう使ってるかとかいった話。 Visual Studio開発部門の開発プロセスと TFS の使い方が結構具体的に解説されていて面白かった。開発のライフサイクルが「ビジョン・主要なテーマ」-「投資効果、顧客価値の大きい領域」-「機能」-「具体的な作業」という階層で表現されていて、それが TFS の作業項目にマッピングされている。これを上から下へも、下から上へもトレースしていけるようになっていて、簡単にプロジェクトの状況が把握できるらしい。 僕が入社した頃から最近まで業務で TFS を使っていて、テンプレートのカスタマイズ(ウォーターフォール化)もやっていたんだけど、Microsoft の TFS の使い方を見ると全然活用できてなかったなぁと感じた。業務でもう触る機会はないだろうから、どうにか業務外で TFS を使う機会を作って Microsoft のテンプレートを一度試してみたい。 ◆ T2-405 ADO.NET Entity Framework アーキテクチャ & ストラテジADO.NET Entity Frameworkを使ってどのように生産性向上やデータアクセス層の汎用化を実現するかという話。 ◆ T2-308 Windows 7 のためのアプリケーション開発既存のアプリケーションをどう Windows 7 に対応させるか、Windows 7 独自の機能をどう取り込んでいくかといった話。 Windows 7 で強化されたところ(Explorer、JumpList、Thumbnail など)と、新機能(マルチタッチ、センサー API など)を活用してどういうことができるかという内容が中心だった。SDKのトレーニングキット?スターターキット?に実装サンプルがあるらしい。 ◆ T2-201 Visual Studio 2010 & .NET Framework 4 概要Visual Studio 2010 と .NET 4 で追加される予定の機能の概要の話。

TechEd2009 参加(2日目)

参加セッション◆ T2-312 あなたの身近な Office 開発の世界VSTO を使った Excel と ADO.NET Data Services の連携や、OpenXML の API を使ったサーバーサイドでの Excel ファイル生成の話。OpenXML の API を使うと、COM 経由に比べて相当高速にファイル生成ができていた。デモで COM は使っていなかったけど、これまでの経験からすると全然早さが違った。◆ T2-401 Deep Dive into .NET Framework CLRアセンブリの中身がどうなっているかという話。CLR の動作についての Deep Dive かと思いきや、アセンブリの PE ヘッダがどうなってるとか、メタデータがどう格納されてるとか、アセンブリの構造に終始した。◆ T2-309 ADO.NET Entity Framework and LINQ データ アクセス開発ADO.NET Entity Framework でのデータモデリング、パフォーマンスチューニング、エラーハンドリングの話。◆ T2-311 64 ビット アプリケーション開発のポイント64bit アプリ開発、というより 32bit から 64bit への移行で気をつけなければいけないポイントの話。コーディング上で気をつけなければならないのは、ポインタのサイズと構造体のアラインメント。開発は .NET 上でしかやってないし、アラインメントいじるほどの最適化をしていないので、この辺は気にしなくてよさそう。 ただ、64bit 上で 32bit アプリケーションを動かす WOW64 (Windows on Windows 64) 上でアプリケーションを実行される可能性がある時は .NET でも色々気をつけないといけないみたい。WOW64 とそうでない場合とで環境変数が違う場合があったり、.NET が 32bit、64bit 両方インストールされるので machine.config が 32bit 用、64bit 用2つできてしまったりする。あと、JET OleDb ドライバは 32bit 版しかないらしい。僕は ADO.NET で Excel にアクセスするためによく使ってるので、頭の片隅に入れておかないと。◆ T1-302 次世代インフラストラクチャ Bra…

TechEd2009 参加(1日目)

TechEd2009 に行ってきた。参加セッション◆ T1-311 Windows 7 と Windows Server 2008 R2 の新機能を活かして実現! より安全な IT インフラアプリケーションの実行を制限する AppLocker と、リムーバブルディスクを暗号化する BitLocker to Go の話。AppLockerはソフトウェア制限ポリシー (SRP) の強化版で、グループポリシーエディタでホワイトリストベース、ブラックリストベースのアプリケーション利用制限がかけられるものらしい。特定のフォルダ内のみ許可とか、特定のバージョン以上許可とか、結構柔軟に制御できるように見えた。ただ、自分はこういうものを導入する立場ではなくて、むしろ制限をかけられる側なので、正直うざいなぁと思って聞いていた。もう1つの BitLocker to Go はリムーバブルメディアを暗号化する機能で、Vista で導入された BitLocker の拡張みたい。基本 WIndows 7/Server 2008 R2 で動くけど、暗号化した時に FAT でフォーマットされた隠しパーティションができて、そこに暗号領域読み取りツールが配置されるから、XP でもその読み取りツールで中が見えるとのこと。便利そうなんだけど、個人的にも業務でも USB メモリを持ち歩くことがないので、今のところ使い道がない…◆ T1-401 Windows 7 と Windows Server 2008 R2 カーネル解説と基本機能の強化Windows 7、Windows Server 2008 R2 のカーネルがモジュール化、パフォーマンス、パワーマネジメントなどの面でどう変わったかの話。今日聞いた中で一番面白かったセッション。カーネルは専門じゃないので難しかったけど。コンポーネント化:OS として最低限必要なものを MinWin としてまとめ、既存の DLL (kernel32.dll とか advapi32.dll とか) をリファクタリングして別 DLL にまとめたらしい。ただ、Virtual DLL という機能で DLL 解決することで既存のアプリも問題なく動くみたい。後、cmd.exe のメッセージングループを CSRSS から独立したプロセスに分離したという話もしていたけどこっちはよくわか…

お引越し

某所のブログを止めて引越ししてきました。