iアプリのストップウォッチ

投稿者: shuichi, タグ: ,,, 投稿日時: 2006/10/11 22:18

iアプリのストップウォッチを作ってみました。自分の携帯電話に(アラームはあるけど)ストップウォッチがなかったので。iアプリのストップウォッチは探せば無料のものがいくらでも見つかりますが、iアプリプログラミングの練習として作成しました。今のところSH902iで動作確認しました。恐らくFOMA 90xシリーズで動作可能です。

http://sks.s101.xrea.com/i/stopwatch/ に携帯電話でアクセスして、DOWNLOADからダウンロードしてください。このURLのQRコードも載せておきます。

Stopwatch QRコード

ストップウォッチをエミュレータ上で動作させた場合の動作画面と設定画面は以下のような感じです。1/100秒単位まで表示していますが実際どの程度の精度なのかは分かりません。設定画面では画面の更新間隔、文字サイズ、動作モードを設定することができます。

Stopwatch
Stopwatch 設定

操作方法は動作モードによって異なります。スプリットタイムモードおよびラップタイムモードにおける操作方法は以下のとおりです。

スタート、ストップ
決定ボタン
リセット
ストップ状態のときに左ボタン
スプリット、ラップ
スタート状態のときに左ボタン
スプリット、ラップモード切替
右ボタン
スプリット、ラップタイムのスクロール
上下ボタン

マルチタイムモードにおける操作方法は以下のとおりです。マルチタイムモードでは5つのストップウォッチをそれぞれ操作することができます。

スタート、ストップ
決定ボタン、2、5、8、0
リセット
左ボタン、1、4、7、*
全てスタート
上ボタン
全てストップ
下ボタン

ストップウォッチの動作中に電話がかかってきた場合iアプリはサスペンド状態に移行しますが、通話を終えてiアプリに復帰したときストップウォッチは通話前と変わらず動作しているはずです(通話中の時間もカウントしています)。ただし、通話中はスタートやストップ、リセットなどの操作は行うことができません。これを回避するには携帯電話を公共モードに設定すれば可能ですが、そういう場合は素直にちゃんとしたストップウォッチを。

DoCoMoが配布しているiアプリ開発ツールにはEclipse用のプラグインも同梱されていましたので比較的楽にソースコードを書くことができました。ただ、iアプリのサイズを考慮せずに書いたためサイズは約7 kBで、この程度のものとしてはちょっと大きめだと思います。

iTunes COM SDK

投稿者: shuichi, タグ: ,,, 投稿日時: 2006/06/06 03:02

半年くらい前にiTunes COM for Windows SDKというものがあることを知りました。COMを扱えるプログラミング言語からiTunesをコントロールすることができます。ということでC#からも簡単にiTunesをコントロールすることができるみたいです。ただ、これを使って何を作ればいいのか…ネタが思いつかない。ちなみにBlogPeople loves Music – AutoPlayというイントロ再生するためのソフトがあるんですけど、これもiTunesをCOMインターフェース経由でコントロールしているんだと思います。

.NETのWildcard(ワイルドカード)クラス

投稿者: shuichi, タグ: ,,, 投稿日時: 2005/09/16 17:00

ファイル名を指定するときなどに用いるワイルドカードを.NETで扱う方法がCode ProjectのConverting Wildcards to Regexesにあります。タイトルのとおりワイルドカードを正規表現に変換しているだけですけど、このようにWildcardクラスを定義するとワイルドカードを直感的に扱えますね。

そういえばファイル検索やウェブ検索で正規表現を扱えたらなぁってたまに思うんですけど、デスクトップ検索アプリケーションなどで対応しているものありますかね。

C#用のBigIntegerクラス

投稿者: shuichi, タグ: ,,, 投稿日時: 2005/09/10 22:46

Javaには任意精度の整数演算を行うことができるBigIntegerクラスがありますが、これのC#版をThe Code Project – C# BigInteger Classで見つけました(かなり今更感がありますが…)。実はJ#を使えばBigIntegerを使えるらしいのですが、やはりC#でも使えたほうがいいですよね。さらっとドキュメントを見て試してみたところなかなか使いやすい感じです。

C#(.NET)におけるメッセージフック

投稿者: shuichi, タグ: ,,,, 投稿日時: 2005/09/04 22:17

昔にVisual Basicをやっていたころ色々と凝ったことをやろうとするとVisual Basicの標準機能では実現できないということが多くありました。こういう時はサブクラス化でメッセージをフックするのが最終手段だったのですが、まぁこれが面倒くさい。最初からVisual C++などで書いたほうが良かったと思うくらいでした。

で、C#やVisual Basic.NETなどの.NET対応の言語においてコントロールに送られてくるメッセージを受け取るには、コントロールのクラスを継承してWndProcをオーバーライドすればメッセージを処理することができます。継承のできなかったVisual Basicと比較するとかなり扱いやすくなっていると思います。

一応これで十分なのですが他にも方法があり、Eco-Softさんのコントロールのサブクラス化(フック)を行うに書かれているように、Windows APIを用いる方法もあります(GCHandle.Allocがポイントなんですよね)。これはVisual Basicにおけるサブクラス化と同じ方法なんですけどね…。

また、さらにMemory of the futureさんのNativeWindowクラスを用いたサブクラス化を見て知ったのですが.NETのNativeWindowクラスを用いる方法があるようです。

自分のコントロールのメッセージを処理したい場合は継承してWndProcのオーバーライドでいいと思いますが、他のコントロールに送られてくるメッセージを拝借してこちら側で処理をしたい場合などにはNativeWindowクラスを用いる方法がいいかもしれませんね。