さきほどアップしました、AFJWV Ver.1.00を
Vista Business 32bit にて少しだけ動かしてみました。
ガシガシとチェックしたわけではありませんが、動いてます。
まぁ、前の「JWV_TEST」時代にもチェックはしてましたけれど。
まず、CADデータのビューイングですが、
通常、時間の掛かる処理を行う場合は、
処理の合間に、Delphiの場合には、Application.ProcessMessage を
掛けるのが通例で、これをする事によって、他のアプリにも動作を
引き渡せて、自分自身にも割り込みの機会を与えられます。
が、
Vistaでこれをすると、自分自身のリドロー要求が発生されてしまい
何度も何度も書き直しをさせられてしまう、という事が起きて
しまいます。
(※何かの設定をすれば止められるかもしれませんが、
取りあえず標準インスト状態では、そうなってしまう場合が
あります。他のマシンや他の版では分りませんが〜)
そのため、この「AFJWV」では、敢えて、
ビューイング中の Application.ProcessMessage は行っていません。
描画を中止する際には、Escapeキーを押せば止まるようにしています。
これは、キーイベントで止めるようにしているのではなく、
キーセンス(キーを押したかどうかを取得する関数の呼び出し)で
[ESC]を押した場合には、処理を中断、という事をしています。
次に、リサイズ(画面サイズの変更)時や、リドロー(他の画面などで本画面が隠されてしまった場合、それを元に戻すため再描画する処理)時、CADデータの再ビューイングを行う処理をするというのが一般的で、これまでのOSでは動作も安定していましたが、Vistaではそれが通用しません。いつ何どき、リドロー要求が来るか、プログラマは予測不可能です。リサイズしている途中にも、リドロー要求が入ってきて、もし、リサイズイベント(OnResize)やリドローイベント(OnPaint)で、CADデータの再描画をする、という事をしていると、悲劇が待っています。
これまでのOSでは、そんなばかな? と思われるかもしれませんが
このAFJWVでも、その悲劇をかわすため、そういった、従来ではよくやった処理を封印しました。ファイルを開いた際や、画面の拡大縮小移動を行ったあと、その現在の画面を、TBitmap のデータをとして保管します(この間は、割込みさせない)。そして、リドローイベントでは、そのTBitmapのデータを画面上に Draw して、画面の再描画を行うようにしています。この再描画をする時間は然程掛かりませんのでそんなにストレスも掛かりません。勿論、現在の画面サイズに合った画面状態とは言えませんが、まぁ、仕方がありません。
※画面が大きくなる場合のことを考えて、その空いた部分だけを再作図させる仕組みを入れたり、最初からサイズの大きなTBitmapを用意するという手法も考えられますが、まぁそこまでしなくてもいいだろうという気はします。後者の場合、Windows95/98では、画面サイズは2000×2000程度までという制限があるので、トラブらないよう注意が必要でしょう。
まぁ取りあえずはそんな感じです。
| このブログのURL
|この記事のURL