長らく自宅のパソコンにはVisual C# 2005 Express Editionをインストールしていたが、そろそろVisual Studio 2010が発売になり、今度はStandard Editionは無いとの事だったので、いまさらながら、Visual Studio 2008 Standard Editionを購入してみた。
2010が安定したら、アップグレードするという予定。(でも、今度はProfessinalか・・・、元を取るくらい使うかな?)
業務では、Visual Studio 2005 Professional Editionを使ったりしていたが、これが結構良かったので、しばらくぶりに開発環境を個人で購入してみようという気になった次第。
2005 Expressでもかなりの事はできたが、2008 Standardになると、また使える機能が増える。ExpressはC#で使っていたが、この機会に、おもしろそうな機能をいろいろ試してみる事にする。
2005の時から既にそうだったが、以前は面倒なコーディングをしなければならなかった事も、かなり簡単に出来るようになっている。
Amazonで購入可能だが、いつまで2008が購入可能かは?
2010ではExpress Editionがあるとは言え、Standard Editionが無くなるという事であれば、もうしばらくは2008のStandard Editionが入手可能かもしれない。
あれ、アップグレード版の値段が上がった?
そろそろ、Amazonでは入手できないかも・・・。現在のお買い得はこんな↓感じらしい。
面白そうな機能や部品を使って、普段作らないようなモノを簡単に作ってみるのが良いので、まずは、タスクトレイに常駐するタイプのプログラムから。
タスクトレイに常駐するプログラム自体は、監視用などで作ったりするが、VB6などより更に簡単になっている。
大してする事もなく、NotifyIconとContextMenuStripの部品をツールボックスからドロップして追加し、Program.csで以下のように起動時にウィンドウを表示しないようにすれば、入れ物は完成。
new frmMain(); Application.Run();後は、処理内容を書いてやれば良いだけ。えらく簡単だ。別途処理クラスを作っておけば、呼び出すだけか・・・。設定の取得やログの出力、DBへのアクセス関連とか用意しておけば、殆ど組み合わせるだけかも。
ウィンドウの形も簡単に任意の形にする事ができるようになっているので、これらを組み合わせて簡単な時計を作ってみる。
ウィンドウの真ん中に日付と時刻を表示するラベルを配置。
タスクトレイから表示と非表示、および終了を操作する為、コンテキストメニューに「表示」「隠す」「終了」を作成。
ウィンドウの形は、ビットマップによる処理は面倒なので、パス指定で簡単な形に変形。
GraphicsPath path = new GraphicsPath(); path.StartFigure(); path.AddEllipse(0, 0, this.Width, this.Height); path.CloseFigure(); this.Region = new Region(path);って、丸くするだけなら、これだけ?
タイマーをツールボックスから追加して、表示時刻を更新。
これであっさり出来上がり。
ちょっと簡単すぎて面白くない。殆どコードを書いてないし・・・。
それなら、って事でウィンドウの形をアニメーションさせてみる。
ウィンドウの形としてセットするパスを時刻更新に使っているタイマーで変形させてみる事にする。
単なる時計なら1秒に一回のタイマー処理で十分だが、アニメーションさせたいので、秒30コマ相当という事で30ミリ秒サイクルで実行し様子を見る。
まあ、グラデーションで背景色も付けてみる。それでもこれだけ↓
Brush br = new LinearGradientBrush(new Point(0, 0), new Point(0, this.Height), Color.Green, Color.White); e.Graphics.FillPath(br, path);画面描画はOnPaintイベントにまとめて、タイマーでリフレッシュさせる、っと。
背景にグラデーションを付けると書き換えでチラツキが発生したので、ウィンドウのプロパティでダブルバッファを有効にしてみる。一応解決。
おっと、タイトルバーを無くしたら移動できない。
移動はウィンドウが不定形なのでウィンドウ内のどこでも選択して行えるように、マウスイベント処理をIDEから簡単に追加して左クリック状態で移動可能にしてみる。
時刻ラベルの上だと移動処理できないので、ラベルの左クリックでも移動可能とし、ついでにラベルのダブルクリックで非表示に移行するようにしてみる。
実行プログラム
凝って作れば、まだいろいろできるが、まあ、こんなモノかな。
以前は何か作るには実現方法でかなり悩んだりしていたが、効率とか考えなければ実現方法よりもアイディアの方に頭を働かせる事ができそうだ。
VB6くらいだとAPIがどうという話になるが、.NET Frameworkだとその辺全く意識しないで済む。これはサンデープログラマーにはぴったりかも。
関連ページ -> Visual Studio 2008 Standard Editionのレポート機能