何とか無事(?)テスト終わった、、、
6時間連続だと、気がめいってくるよ orz
どうでもいいけど、髪きりに行きたいなぁ。
当分土日は大会だろうし、、、
いつになったら切りに行けるんだろう orz
ふと、グラフソフトの仮のタイトルでもある、
計算機のつづりを調べてたら、つづりが違ってたことが発覚 orz
Calcurator → Calculator が正解のようです。
昔よく間違えていた、Explorer のつづりを間違えて
いたことに精通するものがあるかも。。。
まぁ、仕方が無いので、サクラエディタのGrep機能使って抽出して、
ちまちまと置換して、ファイル名変えて、Subversionのリポジトリに
反映させて・・・という風に、ちまちまとやってました。
一応、ほとんどのものの修正は完了。
チェックアウトしたフォルダの名前だけ間違ったままだけど、
もう一度チェックアウトするのも面倒だし、
特に実害なさそうなので、放置。
さて、今日は以下の3点の実装。
・対数関数で底がe以外でもできるようにした。
と言っても、Log(底a,真数b) = (Log(b) / Log(a)) という風に
出力するだけですが。
本当は、引数を複数取れる関数として
実装しようと考えてたけど、力足りず orz
面倒なので、手っ取り早くこういう風にした。
・「」の省略を行っても、「」が補完されるようにした。
まぁ、これはあんまり自信ないです。
表面上はできてるけど、つぎはぎだらけな感じがして、
絶対に不具合が出そうな悪寒。
・解が無い部分のグラフ表示をしないようにした。
例えば、Root(X)の計算時、Xが負の数のときに
グラフを描画しないようにした。
あと、ちまちまと機能修正とか追加とかもしたけど、
何やったか覚えてないので、省略。
ダウンロードはこちらから。
http://yasuharu.net/admin/diary/img/Calculator3.zip
これで、明日帰ってからデバッグして、よさそうなら、
WinCE FANとか、Vectorに投稿してみようかな。
さて、話は変わりますが、明日は実は課題テストだったり。
3年生最初のテスト、いかなる結果となるか・・・。
まぁ、できる限りは、がんばりますが。
さて、今日は先日から作っていたグラフソフトの
続きをやっていました。
ダウンロードはこちらから。
http://yasuharu.net/admin/diary/img/Calcurator2.zip
動作環境は、以下のとおりです。
OS:Windows XP、Pocket PC 2003
その他に必要なソフト:.NET Framework 1.1 もしくは .NET Compact Framework 1.0 以上
今回実装したのは、複数グラフの描画を可能にすること、
および、グラフ機能と電卓機能の分離。
前者は、グラフを複数描画すること自体は、
別に、インスタンスを複数生成すれば
すぐにできちゃうので、描画することは簡単なのですが、
そのグラフの式をどうやって編集するか、というのが、
一番の悩みどころでした。
編集中で保存してない式については、どうするか、、、とか。
まぁ、面倒だから、一般的(?)なかたちで、
説明するのも面倒なので、ソフトを見ればわかると思います。
後者については、やはり、こちらも簡単と言えば簡単なのですが、
GUIコントロールを切り取りとかすると、デリゲートの登録が
外れてしまうようで、再設定が面倒だったです orz
しかも、Pocket PC用のデザインエディタ(でいいのかな?)って、
管理するコントロールの数が増えるにつれて、
やたらと、動作が遅くなるんだよねぇ。。。
んまぁ、そんなこんなで、新しいバージョンが完成しました、っと。
明日からは新学期です。
やっとというか、とうとうというか、
3年生になるわけですが、
大学受験もあることだし、いろいろと
重要な時期になってくるわけですね・・・。
とりあえず、クラスがどうなるのか、それが気になるな。
もう既に、一部ではわかってるようだけど、
自分はどうなのかなぁ、と。
まぁ、去年と同じく男子クラスでも、
すごしやすいからそれはそれでいいんですが、
そのすごしやすさが、後半になって、
違う形で痛手とならないかなぁ、と思う。
まぁ、でも、結局は自分自身のやる気か。
前々から作ろうと思ってた、グラフソフトを今日作ってました。
とはいっても、骨組み自体は前からできていたので、
何とか寝るまでに完成することができました。
まぁ、かなり手抜きですが、とりあえず、
公開してみようかと思います。
ダウンロード
http://yasuharu.net/admin/diary/img/Calcurator.zip
動作環境は、以下のとおりです。
OS:Windows XP、Pocket PC 2003
その他に必要なソフト:.NET Framework 1.1 もしくは .NET Compact Framework 1.0 以上
一応、上記の環境であれば、動作することを確認しています。
ちなみに、X^Xとかやると、バッファオーバーフローしますが、
Exceptionをcatchしようにも、速度が遅くなりそうな気がするので、
特に対応はしていません。
あと、ソースコードについてですが、気が向いたら公開しようと思います。
てか、,NET Refrectorでのぞけば、ほとんどの部分がそのまま表示されたりしますが orz
これで、不具合修正とか、機能追加をある程度終えたら、
Vectorとか、今回はWinCE FANとかにも、投稿してみようかな。
そういえば、さっきVector見てたら、ソフトライブラリの
更新スケジュールに関する告知が書いてあって、
昨日から、ソフトライブラリの更新が、毎週火曜日~土曜日に
変更になるようです。
今までは、週二日だったので、更新頻度が上がって、
登録が完了して、今までだと、次の更新まで待つ必要があったのが、
大方、登録完了した日に更新が反映されるようになるのかな。
んまぁ、最近、頻繁にバージョンアップを行ってるので、
結構うれしいかもしれない。
先日からお伝えしていた、不具合の件ですが、
今回のバージョンで修正が完了しました。
ダウンロード
http://yasuharu.net/software/typing/
変更点
http://yasuharu.net/software/typing/history.html
よくよく考えてみると、そろそろ、
この不具合を確認してから一月か・・・。
その間にダウンロードされた数が、
おおよそ、7千ほど。
それを考えると、ぞっとするものがあるな・・・。
迷惑をおかけした方、本当にすいませんでした。
さて、原因はと言いますと、正直なところ
正確な原因はわかりません。
ただ、実装が荒かったのが、原因かなぁ、と。
どんな風になっていたかと言うと、このプログラムでは
エディットボックスをサブクラス化していました。
その中で、WM_CHARメッセージをすべて、親ウィンドウに流す、と
言うなんとも荒っぽい処理があったのですが、
どうやら、これが原因だったようです。
その不具合をどうやって自分で確認したかって言うのも、
また不思議な話で、Spy++でメッセージを見てたて、
文字列入力すると、文字化けする、って言うことに気づいたわけです。
まぁ、よく理由はわかりませんが、推測は、
エディットコントロールに変換後の文字列を
入力するときに、WMCHARが連続して入ってしまった、
(本当は、WMCHAR、WMIMENOTIFYの順でこないといけないんだと思う)
というのが原因で、3Byte毎のデータが欠落してたっぽい。
ということで、ようやく肩の荷が下りた感じです。
これでやっと、グラフソフトのほうに集中できそうです・・・。
昨日、今日と那須塩原に旅行に行ってました。
まぁ、いろいろとあったけど結構楽しめたと思います。
さて、例のエディットボックスの改良ですが、
旅行行っている間に、全体の処理を考えとこう、、、
なんて思ってたら、案の定、途中から忘れてました。
んで、今日帰ってきてからいろいろといじっていたのですが、
何か、仕様なのか不具合なのか、静的変数に
文字列の代入とかうまくできなかった。
原因はわからなかったけど、まぁ、回避はできてるのでいいと思う。
現状で完了しているのは、IME経由からの書き込み、
キャレットの位置変更、変換の位置変更、
末尾の文字列削除(2Byte,1Byte)ぐらいかな。
実装しないといけないのは、任意位置へのキャレット移動、
任意場所でのBS,Delete、これくらいかな。
ぁー、あと、IMEがOffのときの処理も書いてないや。
まぁ、多分、6日の朝にはできるかなぁ、ってところか。
6日だと、Vectorに反映されるのは、ちょうど一週間ぐらいかぁ。
結構きついかも・・・。なんにしても、早めにやろう。
さて、今日は前々から把握していたけど、対処のしようがなかった、
エディットボックスの文字化けの問題を対処すべく、
いろいろと試行錯誤をしていました。
最初は、内部で使用する文字コードを
Unicodeに変更しようと思ったのですが、
それを直しながらいろいろと調べてると、
Unicodeのアプリケーションだと9x系で
正常な動作が望めないらしい(未確認)ので、
この方法は断念しました。
結局、どういう方法を取ったかというと、
他の文字表示自体は文字化けを起こしていないので、
エディットボックスを自作する、という方法をやってみる。
まず、いろいろと調べてみると、
Windowsにはキャレット表示を制御する
関数(CreateCaret,SetCaretPos...)があって、
それを使って、キャレットの表示を行えるということ。
話はそれるけど、このとき、間違えて、
BeginPaintしたものをReleaseDC(本来ならEndPaintじゃ
ないとまずいはず)してて、描画されてなくて、
ずっと悩んでいました・・・。
んで、何とか表示できるようになって、
次に、IMEの変換文字列の表示等の制御。
これについては、COMPOSITIONFORMを使って、
IMEを操作してやれば、できるようです。
以上、今日やってみたこと。
んでまぁ、ある程度考えた後に、実装に入っていって、
はやめに完成するようにしないとな。